【问题标题】:Laravel eloquent omits null valuesLaravel eloquent 省略空值
【发布时间】:2014-11-17 07:58:58
【问题描述】:

我正在尝试使用两个表进行左连接,我需要首先获取所有用户 ID 和名称,这满足每个用户在第二个表中的条件和总行数。如果用户在第二个表中没有行,则它必须为 null 或零。

这是我雄辩的问题。

$users->where('users.access_type', '=', 'type1')->orwhere('users.access_type', '=', 'type2')
                ->leftJoin(DB::raw("(SELECT user_id, COUNT(*) as count FROM table2 WHERE date > '2014-09-17 16:30:04' GROUP BY user_id) temp_table"), function($leftJoin) {
                    $leftJoin->on('temp_table.user_id', '=', 'users.user_id');
                })->select(DB::raw('users.user_id, users.name, temp_table.count as count'))->orderBy('count')->get();

它不返回具有空计数值的用户。相反,它返回计数最少的用户。我打印了查询日志并复制了上述查询的原始查询,填充了值并执行。它完美地工作并且还返回带有空条目的用户。除了添加值之外,没有对从查询日志获得的查询进行任何更改。复制下面的原始查询。

select users.user_id, users.name, temp_table.count as count from `users` left join (SELECT user_id, COUNT(*) as count FROM table2 WHERE date > '2014-09-17 16:30:04' GROUP BY user_id) temp_table on `temp_table`.`user_id` = `users`.`user_id` where `users`.`access_type` = 'type1' or `users`.`access_type` = 'type2' order by `count` asc

我尝试使用as user 更改 user_id 字段的列名。还尝试使用IFNULL 将空值替换为零。但是还是不行。请让我知道我做错了什么。

【问题讨论】:

    标签: php laravel eloquent laravel-3


    【解决方案1】:

    在您的 Eloquent 查询中,您需要将最后一个函数调用 ...->first() 替换为 ...->get() 以便检索所有结果而不是仅检索第一个结果。

    【讨论】:

    • 没关系。使用 ->first() 因为我只需要返回第一个数组。无论如何,我已经更新了问题。
    • 使用first()只会返回第一个查询结果,这就解释了为什么你只得到一个用户,即计数最少的用户,因为你按count排序结果。使用get() 将返回查询返回的所有用户。它还解释了为什么当你从查询日志中复制它时查询会起作用,因为 first 是由 Laravel 完成的,而不是在数据库查询本身中。
    • first()get() 都不会返回具有空值的条目。两者都返回除 null 之外的最小值。我需要一些帮助。不是因为他们之间的区别。这些是不言自明的。感谢您的尝试。
    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 2013-02-13
    • 1970-01-01
    • 2023-03-21
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多