无法从对象laravel检索字段值

时间:2013-09-06 20:44:21

标签: php laravel laravel-4

我正在尝试使用雄辩的关系从我的数据库中检索一些数据。我在尝试获取特定字段而不是完整对象时遇到了问题。这是我的一些代码。

控制器:

    public function getHosts($table = null)
    {

            foreach (Hosts::all() as $host)
            {
               echo $host->physical_machine_name;
               echo $host->app->id;
            }
     }

模型:

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);
     }

}

我无法获取要显示的应用的ID,但是当我删除' - > id'说明符时,我能够获得包含所有字段的json对象。为什么会这样?

我还应该注意$host->physical_machine_name可以正常工作。

这是我收到的错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$id

我也无法使用预先加载,因为我在我的关系中使用自定义外键。

1 个答案:

答案 0 :(得分:6)

您将apps定义为hasMany关系。这意味着apps将是实体的集合,而不是单个实体,因此是Illuminate\Database\Eloquent\Collection实例,因为Laravel将此类用于由Eloquent填充的实体列表。 作为实体的集合,您将不具有App实体的任何属性。

而不是echo $host->app->id;你可以

foreach($host->app as $app) {
    echo $app->id;
}