14

私は素晴らしい Laravel を使用していますが、データベースの問題で立ち往生しています。

次のように、3 つのテーブルがあるとします。

表 1: ページ

id    |   route   |  title

表 2: 要素

id    |   page_id   |  type

表 3: コンテンツ

id    |   element_id   |  data

そのページIDを持つすべての要素を順番に選択するページに対して単一の選択を行い、要素ごとに要素IDを持つすべてのコンテンツ行を選択する必要があります。

ページ モデルに静的なload_by_route($route)関数が必要です。呼び出されると、ルートを使用してページ情報と要素およびコンテンツをロードして返します。理想的には、このすべての情報を含む単一のオブジェクト/配列を返します。

基本的に、has_many() 呼び出しを連鎖させて 2 レベルの関係を得る方法がわかりません。

4

2 に答える 2

31

熱心な読み込みを調べてください。これはあなたが望むことをするはずです。

class Page extends Eloquent {

    public function elements()
    {
        return $this->has_many( 'Element' );
    }

}

class Element extends Eloquent {

    public function contents()
    {
        return $this->has_many( 'Content' );
    }

}

class Content extends Eloquent {}

$page = Page::with( array( 'elements', 'elements.contents' ) )->first();

https://laravel.com/docs/master/eloquent-relationships#eager-loading

于 2013-03-07T22:46:54.543 に答える