Laravel (v6.x) addSelect() 始终returns 子查询字段的空值
Laravel (v6.x) addSelect() always returns a null value for the subquery field
我有这个 Eloquent 查询:
$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 中对原始查询进行 DB::select() 并且该字段的 returns 为 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();
我有这个 Eloquent 查询:
$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 中对原始查询进行 DB::select() 并且该字段的 returns 为 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();