Laravel 5 orderby一对一的关系

时间:2015-10-01 09:54:00

标签: php sql laravel eloquent

使用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必须能够原生才能完成的基本内容。

感谢您的想法:)

1 个答案:

答案 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()