使用Laravel 5.1和Eloquent时,我遇到了一个非常基本的问题。
为了简单起见,我通过这个例子减少了我的问题:我有2个模型:
潜在客户:
ID | name | fk_city
城市:
ID | name | postalcode
在Leads.php模型中:
public function city() {
return $this->belongsTo('\App\Models\Cities','fk_city');
}
我想对这个城市的名字进行排序。
我已尝试过eagger load orderby:
Leads::with(['city'=>function($q) {
$q->orderby('name','desc');
}])->get();
但它不会影响结果。
我还读到我们必须使用" join()"声明并手动告诉Eloquent该做什么。看起来有点矫枉过正,因为这种类型的东西是任何ORM必须能够原生才能完成的基本内容。
感谢您的想法:)
答案 0 :(得分:1)
Eloquent遵循Active记录模式,因此通常使用单独的查询进行预先加载。你需要加入这个:
Leads::join('cities', 'leads.fk_city', '=', 'cities.ID')->orderby('cities.name','desc')->with('city')->get();
如果您经常需要此类查询,可以create an scope in your model重复使用该查询。
其他选项是,因为您的结果是Laravel Collection,您可以使用集合对象的方法sortBy()
or sortByDesc()