【问题标题】:Order by field from other table从其他表中按字段排序
【发布时间】:2014-07-06 19:39:30
【问题描述】:

我有 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;

然后我就可以访问来自user 的所有内容以及来自user_info 的这三个字段。我到底如何用 Laravel 做到这一点?

【问题讨论】:

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


    【解决方案1】:
    $users = User::with('user_info')->where('expire', '>', $now)
        ->orWhereNull('expire')->get();
    $usercount = $users->count();
    

    Eloquent Relationships

    Eager Loading

    【讨论】:

    • 这不会看到,因为 Laravel 会用已加入的模型中的原始模型中的同名字段的值覆盖... $user->id 会给我@987654324 @ 而不是 user.id。其他字段也一样。
    • 请为您的答案添加一些解释。
    • robinj 那不是真的......那么任何关系都不会起作用,因为它们都将具有主键和外键等
    • @zaq178miami 这是为满足那些 wheres 设置的标准的任何用户急切加载的“user_info”。
    • 您将未正确执行的连接与 eloquent 如何构建关系查询混淆了。它们是不同的东西。
    【解决方案2】:

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

    $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 被覆盖,则连接将毫无用处。

    【讨论】:

    • 它不是 BUG ...查看生成的查询,您会看到发生了什么。
    • Laravel 论坛Laravel 4 - Eloquent Alias 上的这个主题展示了一些处理列值覆盖的技巧。我想可以通过访问器为列实现类似的功能(这可能对某些人不起作用)。
    • 令人难以置信的是,像这样的简单任务似乎用 Laravel 根本不可能实现......要么就是这样,要么没有其他人愿意给出一个体面的(working)答案。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2017-10-06
    • 2014-05-16
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多