web-dev-qa-db-ja.com

Eloquentを使用して関係の関係を取得するLaravel

次のテーブルと関係を持つデータベースがあります。

広告1-1m-1モデルm-1 ブランド

広告を取得したい場合は、次のように使用できます。

Advert::find(1);

車の詳細が必要な場合は、以下を使用できます。

Advert::find(1)->with('Car');

ただし、(Carとの関係に従って)モデルの詳細も必要な場合、構文は次のようになります。

Advert::find(1)->with('Car')->with('Model');

どうもありがとう

23
Ben Thompson

公式 documentation の「Eager Loading」にあります

複数の関係:

$books = Book::with('author', 'publisher')->get();

ネストされた関係:

$books = Book::with('author.contacts')->get();

だからあなたのために:

Advert::find(1)->with('Car.Model')->get();
71
Björn

まず、関係を作成する必要があります。

<?php

class Advert extends Eloquent {

    public function car()
    {
        return $this->belongsTo('Car');
    }

}

class Car extends Eloquent {

    public function model()
    {
        return $this->belongsTo('Model');
    }

}

class Model extends Eloquent {

    public function brand()
    {
        return $this->belongsTo('Brand');
    }

    public function cars()
    {
        return $this->hasMany('Car');
    }

}

class Brand extends Eloquent {

    public function models()
    {
        return $this->hasMany('Model');
    }

}

次に、この方法でアクセスする必要があります。

echo Advert::find(1)->car->model->brand->name;

しかし、Laravelはそれらをそのように推測するので、テーブルフィールドはそうである必要があります。

id (for all tables)
car_id
model_id
brand_id

または、関係でそれらを指定する必要があります。