Laravel 通过表关系排序';在拉雷维尔
我有一个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
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)