2

雄弁な関係を使用して、DB からデータを取得しようとしています。オブジェクト全体ではなく特定のフィールドを取得しようとすると、問題が発生します。これが私のコードの一部です。

コントローラ:

    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

リレーションシップでカスタム外部キーを使用しているため、熱心な読み込みも使用できません。

4

1 に答える 1

7

あなたは関係appsとして定義しています。hasManyこれはapps、単一のエンティティではなく、エンティティのコレクションであることを意味するため、Illuminate\Database\Eloquent\Collectionインスタンスになります。これは、LaravelがEloquentによって入力されたエンティティのリストにこのクラスを使用するためです。エンティティのコレクションであるため、エンティティのプロパティはありませんApp

echo $host->app->id;あなたができる代わりに

foreach($host->app as $app) {
    echo $app->id;
}
于 2013-09-06T21:06:40.927 に答える