我有一个包含用户和订单模型的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(不在服务层,并且没有原始选择)轻松地对类似的内容进行排序?
谢谢。
答案 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')