没有错误,只是一个空的结果。我试图弄清楚为什么模型中的这个查询显示一个空集合。
Mysql Workbench查询:
select
u.`name`, u.email, ual.admin, a.account_name
from
users as u
join users_account_link as ual on u.id = ual.user_id and u.account_id_in_use = ual.account_id
join accounts a on ual.account_id = a.id
where
u.sub = 'ABCDE';
吐出包含所需结果集的一行。
在Laravel查询构建器中重新创建:
$settings = DB::table('users as u')
->join('users_account_link as ual', function ($join) {
$join->on('u.id', '=', 'ual.user_id')
->where('u.account_id_in_use', '=', 'ual.account_id');
})
->join('accounts as a', 'ual.account_id', '=', 'a.id')
->select('u.name as user_name', 'u.email as user_email', 'ual.admin as admin_check', 'a.account_name')
->where('u.sub',auth()->user()->sub)
->get();
dd($settings);
提供空集合。我做了很多自定义查询,但是我已经缩小了结果集的问题是join users_account_link as ual on u.id = ual.user_id and u.account_id_in_use = ual.account_id
的附加条件,并试图将此条件移动到仍然提供空结果的where子句。
答案 0 :(得分:0)
'u.account_id_in_use', '=', 'ual.account_id'
都是整数,但是将u.account_id_in_use替换为硬编码的整数,例如2会返回一个结果。因此,Laravel似乎在这个领域存在问题并取代了where->使用whereRaw现在返回所需的结果。
对于遇到类似问题的任何人,请尝试使用硬编码值替换字段以隔离问题,并在可能的情况下使用raw来克服此问题。
希望这可以帮助任何有需要的人。