Laravel:根据嵌套关系的字段对查询结果进行排序

标签 laravel eloquent laravel-query-builder laravel-nova eloquent-relationship

我有两个模型,其关系定义如下

顺序

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/

相关文章:

php - 两个表中的数据在连接时复制

php - 多对多关系查询。拉维尔

php - 组织数据库结构

mysql - Laravel 从用户表单输入详细信息获取数据库结果

mysql - laravel 根据属性过滤结果

mysql - Laravel QueryBuilder - 相同查询的 `where()` 和 `whereRaw()` 的不同结果

php - "Unknown database type json requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it."运行 php artisan migrate 命令时

unicode - Str::slug 替代印地语和阿拉伯语字符串?

mysql - Laravel 查询生成器子查询不返回特定的内部循环

php - 如何在此数据库模式中创建 hasManyTrough Eloquent 关系?