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();
我正在从事一个使用 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();