我有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 做到这一点?
啊,该死。好像顺序错了。
$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
被覆盖,连接几乎毫无用处。