从另一个表中按字段排序

时间:2014-07-06 19:39:30

标签: join laravel laravel-4 sql-order-by eloquent

我有2张桌子; useruser_info及其模型UserUserInfouser拥有idexpireuser_info_id,而user_info拥有idusername

我想让expire大于或小于$nownull的所有用户,并且我想按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;

然后我就可以访问useruser_info中的3个字段中的所有内容。我怎么用Laravel做到这一点?

2 个答案:

答案 0 :(得分:1)

$users = User::with('user_info')->where('expire', '>', $now)
    ->orWhereNull('expire')->get();
$usercount = $users->count();

Eloquent Relationships

Eager Loading

答案 1 :(得分: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被覆盖,联接几乎没用。