arr*_*l12 2 php laravel laravel-4
我试图使用雄辩的关系从我的数据库中检索一些数据.我在尝试获取特定字段而不是完整对象时遇到了问题.这是我的一些代码.
控制器:
public function getHosts($table = null)
{
foreach (Hosts::all() as $host)
{
echo $host->physical_machine_name;
echo $host->app->id;
}
}
Run Code Online (Sandbox Code Playgroud)
楷模:
class Hosts extends Eloquent
{
protected $connection = 'mysql_2';
protected $table = 'hosts';
public $timestamps = false;
public function app(){
return $this->hasMany('Apps', 'os_instance_name')->orWhere('os_instance_name', $this->os_instance_name);
}
}
class Apps extends Eloquent
{
protected $connection = 'mysql_2';
protected $table = 'app_instances';
public $timestamps = false;
public function host()
{
return $this->belongsTo('Hosts','os_instance_name')->orWhere('os_instance_name', $this->os_instance_name);
}
}
Run Code Online (Sandbox Code Playgroud)
我无法获取要显示的应用程序的ID,但是当我删除' - > id'说明符时,我能够获得包含所有字段的json对象.为什么会这样?
我还应该注意,$host->physical_machine_name工作正常.
这是我收到的错误:
Undefined property: Illuminate\Database\Eloquent\Collection::$id
Run Code Online (Sandbox Code Playgroud)
我也无法使用急切加载,因为我在我的关系中使用自定义外键.
你定义apps为一种hasMany关系.这意味着apps将是实体的集合,而不是单个实体,因此是Illuminate\Database\Eloquent\Collection实例,因为Laravel将此类用于由Eloquent填充的实体列表.作为实体的集合,您将不具有该App实体的任何属性.
而不是echo $host->app->id;你可以
foreach($host->app as $app) {
echo $app->id;
}
Run Code Online (Sandbox Code Playgroud)