mysql - Laravel (v6.x) addSelect() 总是为子查询字段返回一个空值
问题描述
我有这个雄辩的查询:
$users = User::query()
->addSelect([
'latest_login' => Login::select('login_time')
->where('logins.user_id', 'users.id')
->latest('login_time')
->take(1)
])
->orderBy('latest_login', 'DESC')
->get();
问题是“latest_login”字段始终为空。
但是,如果我在 mysql 中运行查询,则该字段已完全填充:
'SELECT `users`.*, (SELECT `login_time` FROM `logins` WHERE `user_id` = users.id AND `login_time` IS NOT NULL ORDER BY `login_time` DESC LIMIT 1) AS `last_login` FROM `users` WHERE `logged_in` > 0 ORDER BY `last_login` DESC
我还尝试使用 DB::select() 在 Laravel 中运行原始查询,并且该字段也返回 null。
请问有什么想法吗?
解决方案
我在这里可能错了,但我认为您必须使用whereColumn
而不是where
实际使用列的值,而不仅仅是带有列名的字符串。
$users = User::query()
->addSelect([
'latest_login' => Login::select('login_time')
->whereColumn('logins.user_id', 'users.id')
->latest('login_time')
->take(1)
])
->orderBy('latest_login', 'DESC')
->get();
推荐阅读
- python - 如何在 python 中使用 scikit 找到 K-Means 聚类的 k 值
- javascript - 为什么计数器结束时不显示答案
- c# - 在使用 EFCore 中的 DBContext 进行查询期间,什么会导致“集合是只读的”异常?
- python - 串行顺序 Python Django 框架中的多个任务
- javascript - Object.create vs. new(类或构造函数)
- ffmpeg - FFMPEG“无法为 'udp:// 找到合适的输出格式
: '" - rust - Rust 从 lib.rs 导入函数
- c - 如何访问C中的接口设备?
- javascript - 如何查找导致pm2重启的错误
- c++ - /usr/bin/ld: 找不到 -lc++