2017-04-17 43 views
0

我有這個結構。Laravel按相關表排序不起作用

class Product extends Model{ 
    public function office() 
    { 
     return $this->belongsTo(Office::class,'office_id'); 
    } 
} 

我想office.name列出products秩序。
這是查詢

$res = \App\Product::with(['office' => function($q){ 
     $q->orderBy('offices.name','asc'); 
    }])->get(); 

這是輸出迴路

foreach($res as $key => $val){ 
     print "<br />user: ".$val->id.", office: ".$val->office->id; 
    } 

這是Product數據: +----+--------+ | id | name | +----+--------+ | 1 | Life | | 2 | Cars | | 3 | Health | | 4 | House | +----+--------+

這是Office +----+----------------+ | id | name | +----+----------------+ | 1 | First office | | 2 | working office | +----+----------------+

的數據按順序排列不影響結果。 同樣的結果,按順序不存在。

感謝

回答

0

在你的代碼是簡單的「排序」按名稱的辦事處,這意味着如果每一個產品有很多辦事處,就在辦事處按字母順序排序。

要對集合進行排序(OrderBY()),該列必須是集合對象的屬性。一種解決方案可能是加入你的模型。像這樣的東西可能會幫助你。

$res = Product::with('office') 
->join('offices', 'products.office_id', '=', 'offices.id') 
->select('products.*', 'offices.name') 
->orderBy('office.name') 
->get(); 
+0

事實並非如此,每個產品都有一個辦公室。如模型所述。 – SexyMF

+0

無論大小寫如何,我的代碼仍應該完成這項工作。試一試。你可以看到我用('辦公室')'做''辦公室'是多麼正確?因爲我知道它只有一個辦公室。 – EddyTheDove