2017-10-19 81 views
0

In Laravel 5.5我有一個類似於下面的ERD圖像的數據庫設置。我更喜歡在查詢生成器上使用雄辯,但我不確定它可以通過Eloquent完成。Laravel Eloquent/DB通過外部表格和訂單結果獲取關係

enter image description here

關係

  • 對象A - >對象B [一個 - 一對多]
  • 對象B - >對象C [一個 - 酮]

如何ld我執行以下操作:使用對象A開始查詢。通過對象AI想要獲得對象B,並且雖然對象BI想獲取相應的對象C.最後需要做的是將結果排序由position列對象B.

我已經試過自己升序:憑藉口才得到對象A和B 的所有對象(這是上排序位置遞增)。 B的Foreach對象尋找相應的對象C.但我知道這不是解決問題的最佳方案。

有沒有建議嗎?

+1

這是絕對有可能的,閱讀了關於https://laravel.com/docs/5.5/eloquent-relationships爲參考 – pseudoanime

+0

@pseudoanime感謝。我已經多次閱讀該頁面,但是您希望在該場景中使用哪部分文檔? –

+0

看看頁面中嵌套的熱切加載。 $ results = ObjectA :: with('ObjectB.ObjectC) - > get();會給你所有的3個對象。那麼這只是一個排序問題。 – pseudoanime

回答

0

有了你們的幫助,我來到了我能想到過最好的解決辦法:

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

對象A型號

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

ObjectB Model

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

你可以用雄辯

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

感謝這個工程,但我注意到兩件事: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();