Laravel 通过表关系排序';在拉雷维尔

Laravel 通过表关系排序';在拉雷维尔,laravel,eloquent,eloquent-relationship,Laravel,Eloquent,Eloquent Relationship,我有一个Laravel项目,其中有用户和订单模型。 用户模型与排序到订单模型的关系如下: public function last_order() { return $this->hasOne('Order', 'user_id')->orderBy('created_at', 'desc')->limit(1); } User::has('last_order')->with('last_order')->orderBy('last_order.creat

我有一个Laravel项目,其中有用户和订单模型。 用户模型与排序到订单模型的关系如下:

public function last_order() {
   return $this->hasOne('Order', 'user_id')->orderBy('created_at', 'desc')->limit(1);
}
User::has('last_order')->with('last_order')->orderBy('last_order.created_at', 'desc')->get();
这将返回特定用户的最后一个订单。它很好用

我还需要返回最新订单中的排序用户数组。我尝试在存储库层上使用Elount这样做:

public function last_order() {
   return $this->hasOne('Order', 'user_id')->orderBy('created_at', 'desc')->limit(1);
}
User::has('last_order')->with('last_order')->orderBy('last_order.created_at', 'desc')->get();
它不起作用。我也用sortBy的方法试过了,结果一样。它返回我,最后一个订单表不存在

您能给我一些建议吗,如何使用Elount(不在服务层,也没有原始选择)轻松地对这样的内容进行分类

谢谢。

sortBy()
在获取()集合后,使用点表示法可以很好地工作

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

我还注意到
last\u order()
关系已经排序。除非您创建一个不将返回限制为1且未预先排序的不同关系,否则这将不起作用

我突然想到:

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')

订单表的名称是什么?是的,您有权。它不适用于已排序的关系。现在我找到了这个解决方案(和我以前尝试过的访问方式略有不同),我将把它添加到答案中。无论如何,谢谢你的回答(+1)