通过表关系在Laravel中排序

时间:2019-06-27 18:41:21

标签: laravel eloquent eloquent--relationship

我有一个包含用户和订单模型的Laravel项目。 用户模型与对Order模型的排序有关,如下所示:

public function last_order() {
   return $this->hasOne('Order', 'user_id')->orderBy('created_at', 'desc')->limit(1);
}

这将返回特定用户的最后订单。很好。

我还需要从最新的订单中返回经过排序的用户数组。我试图在存储库层使用Eloquent做到这一点:

User::has('last_order')->with('last_order')->orderBy('last_order.created_at', 'desc')->get();

它不起作用。我也尝试使用sortBy方法,结果相同。返回我,说last_order表不存在。

您能否建议我,如何使用Eloquent(不在服务层,并且没有原始选择)轻松地对类似的内容进行排序?

谢谢。

2 个答案:

答案 0 :(得分:1)

在您sortBy()集合之后,

get()可以正常工作。

User::has('last_order')->with('last_order')->get()->sortByDesc('last_order.created_at');

我还注意到last_order()关系已经排序。除非您创建不将返回值限制为1且未预先排序的其他关系,否则此方法将不起作用。

答案 1 :(得分:0)

我想到的是

public function scopeLasorder($query)
{
    return $query->join(
        with(new Orden())->getTable(), 'user_id', '=', 'id' //id de User
    )->whereNotNull('last_order');
}

并执行

User->lastorder->orderBy(new Orden())->getTable().'.created_at', 'desc')