按其他表中的字段排序

问题描述 投票:0回答:2

我有2张桌子;

user
user_info
以及他们的模型
User
UserInfo
user
持有
id
expire
user_info_id
,而
user_info
持有
id
username

我想获取

expire
大于或小于
$now
null
的所有用户,并且我想按
username
对列表进行排序。最后一部分是我的问题所在。

我目前拥有的;

$usersQ = User::where ('expire', '>', $now)->orWhereNull ('expire');
$usersCount = $usersQ->count ();
$users = $usersQ->get ();

我已经尝试过了;

$usersQ = User::with ('user_info')->join ('user_info', 'user.user_info_id', 'user_info.id')->where ('expire', '>', $now)->orWhereNull ('expire')->orderBy ('username');

不幸的是,这不起作用(SQL 语法错误)。

注意:我实际上需要

User
作为我的主要实体,而不是
UserInfo
,因为我需要来自视图中的
User
的其他信息。


基本上;

SELECT user.*, user_info.username, user_info.fname, user_info.lname
FROM user
INNER JOIN user_info ON user.user_info_id = user_info.id
ORDER BY user_info.username ASC;

然后我就可以访问

user
中的所有内容以及
user_info
中的这 3 个字段。我到底如何用 Laravel 做到这一点?

join laravel laravel-4 sql-order-by eloquent
2个回答
1
投票
$users = User::with('user_info')->where('expire', '>', $now)
    ->orWhereNull('expire')->get();
$usercount = $users->count();

雄辩的关系

急切加载


0
投票

啊,该死。好像顺序错了。

$usersQ = User::join ('user_info', 'user_info.id', '=', 'user.user_info_id')->orderBy ($order)->where ('expire', '>', $now)->orWhereNull ('expire');
$usersCount = $usersQ->count ();
$users = $usersQ->get ();

这工作得很好,除了 Laravel 中的错误(是的,在我看来这是一个错误),它会覆盖任何具有重复名称的字段的值。如果有人知道解决这个问题的方法那就太好了...如果您的

id
被覆盖,连接几乎毫无用处。

© www.soinside.com 2019 - 2024. All rights reserved.