2017-10-19 8 views
0

Laravel 5.5私は以下のERDイメージのようなデータベース設定をしています。私はEloquent over Query Builderを使うのが好きですが、私はEloquentでそれを行うことはできません。Laravel Eloquent/DB外部のテーブルと注文の結果との関係を取得する

enter image description here

関係

  • オブジェクトA - >オブジェクトB [1 - 多くに1]
  • オブジェクトB - >オブジェクトC [1 - 1]

どのように私は次のようにします:オブジェクトAでクエリを開始します。オブジェクトAIではオブジェクトBを取得したいのですが、オブジェクトBIは対応するオブジェクトCを取得したいと考えています。最後に必要なことは、結果がソートされることですオブジェクトB.私は自分自身を試してみた何

position列で昇順:を雄弁では、オブジェクトAとB のすべてのオブジェクト(これは位置の昇順にソートされている)を取得します。 BのForeachオブジェクトは対応するオブジェクトCを探します。しかし、私はこれが問題の最良の解決策ではないことを知っています。

アドバイスはありますか?

+1

それは参照用https://laravel.com/docs/5.5/eloquent-relationships – pseudoanime

+0

@pseudoanime感謝をよく読んで、間違いなく可能です。私はそのページを何度も読んだことがありますが、ドキュメントのどの部分をこのシナリオで使用したいと思いますか? –

+0

ページ内のネストされたeagerの読み込みを見てください。 $ results = ObjectA :: with( 'ObjectB.ObjectC) - > get();あなたに3つのオブジェクトすべてを与えます。それは単なるソートの問題です。 – pseudoanime

答えて

0

君たちの助けを借りて、私は私がオフに考えることができる最高のソリューションに来た:

ObjectA::with(['ObjectB' => function($query){ 
    $query->orderBy('position', 'asc'); 
},'ObjectB.ObjectC'])->get(); 

をObjectAモデル

public function ObjectB() 
{ 
    return $this->hasMany('App\ObjectB'); 
} 

ObjectBモデル

public function ObjectC() 
{ 
    return $this->hasOne('App\ObjectC'); 
} 
1

熱心な負荷でこれを行うことができます。

何かのように:

$result = $ObjectA->with(['ObjectB', 'ObjectB.ObjectC'])->get(); 

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

+0

これは、ObjectAがObjectCとの直接の関係が正しい場合にのみ有効です。しかし、ObjectAはObjectBとObjectCの関係を持っています。 –

0

あなたはここにどのように私は見直されるまで、私の編集が表示されている必要がありガーソンによって以前のコメントを更新

$data['result'] = ObjectA::join('ObjectB','ObjectA.id','=','ObjectB.object_a_id') 
->join('ObjectC','ObjectB.id','=','ObjectC.object_b_id')->get(); 
+0

ありがとうございます。これはうまくいきましたが、私が気づいた2つのことがあります。1.あなたは 'orderBy( '​​position'、 'asc')'を忘れてしまいました。2. ObjectAの情報はもうありません。少なくとも、他のオブジェクトのすべての情報を持つobjectAのidを持っていますか?私はすべてのテーブルのすべてのフィールドが必要なので、参加はそれほど悪くないでしょう。 –

1

雄弁を使用することができますが、私はそれをするだろう:

$result = $ObjectA->with(['ObjectB', 'ObjectB.ObjectC'])->get(); 
0

これは、私はおそらく行うにしようとするものである:

$ObjectA->with('ObjectB.ObjectC') 
    ->join('ObjectB','ObjectA.id','=','ObjectB.object_a_id') 
    ->orderBy('ObjectB.position','asc') 
    ->get(); 
関連する問題