Laravel 如何按范围内的关系排序?

发布于 2025-01-10 08:09:27 字数 644 浏览 0 评论 0原文

我在用户模型中有以下范围

$query->with('country')
          ->when($filters['search'] ?? null, function ($query, $search) {
              return $query->where('name', 'LIKE', '%' . $search . '%')
                    ->orWhereHas('country', function ($query) use ($search) {
                        $query->where('name', 'LIKE', '%' . $search . '%');
                    });
          });

       
            $query->orderBy('name', 'asc');
       }

        return $query;
    }

我对 Laravel 很陌生 - 我目前上面的查询按用户名排序,但我想按国家/地区名称排序。我可以使用 country_id 执行此操作,因为存在关系,但不确定如何按国家/地区名称排序。

谢谢

I have the following scope in User model

$query->with('country')
          ->when($filters['search'] ?? null, function ($query, $search) {
              return $query->where('name', 'LIKE', '%' . $search . '%')
                    ->orWhereHas('country', function ($query) use ($search) {
                        $query->where('name', 'LIKE', '%' . $search . '%');
                    });
          });

       
            $query->orderBy('name', 'asc');
       }

        return $query;
    }

I am pretty new to Laravel - I currently the above query is sorting by user name but I would like to sort by country name. I can do this with country_id as there is a relation but not sure how to sort by country name.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美男兮 2025-01-17 08:09:27

我们可以使用两种方法按公司对这些用户进行排序。第一种是使用联接:

$users = User::select('users.*')
->join('countries', 'countries.id', '=', 'users.country_id')
->orderBy('companies.name')
->get();

这是为此查询生成的 SQL:

select users.*
from users
inner join countries on countries.id = users.country_id
order by countries.name asc

第二种方法是使用子查询:

$users = User::orderBy(Country::select('name')
    ->whereColumn('countries.id', 'users.country_id')
)->get();

您可以在此处查看参考:按 laravel 中的关系列对数据库查询进行排序

there are two approaches we can use to order these users by their company. The first is using a join:

$users = User::select('users.*')
->join('countries', 'countries.id', '=', 'users.country_id')
->orderBy('companies.name')
->get();

Here is the generated SQL for this query:

select users.*
from users
inner join countries on countries.id = users.country_id
order by countries.name asc

The second way is using a subquery:

$users = User::orderBy(Country::select('name')
    ->whereColumn('countries.id', 'users.country_id')
)->get();

And you can see the reference here: ordering database queries by relationship columns in laravel

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文