2017-02-22 24 views
0

我有以下2個表:Laravel雄辯爲了利用相關數據

Cars 
---- 
id | created_at 

and 

Repaired 
id | cars_id | updated_at 

我要顯示所有的汽車,通過created_at降序排列,同時也通過updated_atRepaired透視表排序。修復可以有許多特定的條目cars_id

所以,如果carA是created_at 2017-02-20,並carB是created_at 2016-01-10,但updated_at在修復了carB2017-02-22,我想顯示carBcarA,因爲關係是「更新」。

我也不想從關係表中加載數據。

我試過follwing:

$cars = $model->load(['repaired' => function($query) { 
    return $query->orderBy('updated_at', 'desc'); 
}])->orderBy('created_at', 'desc'); 

$model->join('repaired', 'repaired.cars_id', '=', 'cars.id') 
     ->orderBy('repaired.updated_at', 'desc') 
     ->orderBy('cars.created_at', 'desc') 
     ->select('cars.*'); 

^這個查詢從修復表中返回的所有項目,即使updated_atNULL。我不能將他們分組。

+0

到目前爲止你有嘗試過嗎? – Sebastian

回答

1

每次修復更新時,您都可以使用Eloquent中的touch parent timestamps功能更新車的updated_at

在你修復模型中只需添加這行:

protected $touches = ['car']; 

這是假設你的聯繫方法被命名爲當然car()

然後,你可以這樣做:

Cars::orderBy('updated_at'); 

每次在Repaired表中的一行添加或更新,在car關係指定的汽車將有其updated_at設置爲同一個時間。這樣你可以通過它來訂購。