我有两个模型,其关系定义如下
顺序
public function owner()
{
return $this->belongsTo(User::class, 'owner_id');
}
用户
public function company(){
return $this->belongsTo(Company::class, 'company_id');
}
公司表有“标题”字段。 我想要的是按公司名称对所有订单进行排序/排序。我尝试了不同的解决方案,但似乎没有任何效果。任何帮助或提示将不胜感激。
我最近尝试的解决方案是
$query = OrderModel::whereHas('owner', function($q) use ($request){
// $q->orderBy('owner');
$q->whereHas('company',function ($q2) use ($request){
$q2->orderBy('title',$request->get('orderByDirection') ?? 'asc');
});
});
但我在查询结果中没有得到用户和公司关系。对于“ASC”和“DESC”顺序,结果也保持不变。
最佳答案
您可以在添加 join
之后对查询进行排序,例如:
return Order::join('users', 'users.id', '=', 'owner_id')
->join('companies', 'companies.id', '=', 'users.company_id')
->orderBy('companies.title')
->select('orders.*')
->get();
关于Laravel:根据嵌套关系的字段对查询结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69313734/