Laravel 查询生成器 orderBy 不排序

Laravel query builder orderBy not ordering

我正在从事一个使用 Laravel query builder 的项目,但我 运行 在尝试订购数据时遇到了麻烦。首先,我需要按名称排序,它是 'users' table.

的连接列

我的代码:

        $Records = Tickets::with('User', 'Session', 'Session.Course');
        $Records = $Records->orderBy('first_name', 'desc'); //generates an error as no first_name column exists in the current query, although the first name is rendered in the view!
        $Records = $Records->get();

我不确定查询生成器如何建立关联以获取用户名,因为调用 toSql() 来获取原始查询在任何时候都不会生成连接查询。

正确的做法是什么?

这真的很棘手,感谢您的帮助。

with() 不会将 JOIN 添加到查询中,它会为每个关系执行单独的查询。

您可以自己添加一个JOIN

$Records = Tickets::select('tickets.*')
    ->join('users', 'users.id', '=', 'tickets.user_id')
    ->orderBy('users.first_name', 'desc')
    ->get();

在 Laravel 5.2.32 中,您可以重新使用修改后的关系 withCount():

$Records = Tickets::withCount(['User as first_name' => function($query) {
    $query->select('first_name');
}])->orderBy('first_name', 'desc')->get();

这选择 users.first_name 与子查询:

select `tickets`.*,
  (select `first_name`
   from `users`
   where `tickets`.`user_id` = `users`.`id`) as `first_name`
from `tickets`
order by `first_name` desc

您没有提及哪个 table 具有 first_name 列,因此您必须定义 table 名称。 试试这个:

$Records->orderBy('users.first_name', 'desc');

你应该试试这个:

$Records = Tickets::select('tickets.*')
    ->join('users', 'tickets.user_id', '=', 'users.id')
    ->orderBy('users.first_name', 'desc')
    ->get();