在我的Laravel查询生成器中,我有以下部分:
->leftJoin('tbluserprivileges', function ($join) use ($id) {
$join->on('tblprivileges.id', '=', 'tbluserprivileges.PrivilegeID');
$join->on('tbluserprivileges.UserID', '=', (int)$id);
})
我想在LEFT JOIN
上有两个条件,其他参数是动态的,即用户ID。然而,SQL输出是
select `tblprivileges`.`id`, `tblprivileges`.`Description`, `tbluserprivileges`.`UserID` from `tblprivileges` left join `tbluserprivileges` on `tblprivileges`.`id` = `tbluserprivileges`.`PrivilegeID` and `tbluserprivileges`.`UserID` = `1`
正如你所看到的,位在哪里:
left join `tbluserprivileges` on `tblprivileges`.`id` = `tbluserprivileges`.`PrivilegeID` and `tbluserprivileges`.`UserID` = `1`
1
被包装在backticks(`(中,因此它被读取为列,而不是。我试着在Laravel之外运行代码,并删除了包装反勾,一切都很好。我很不确定如何删除这些反勾号,我尝试将其转换为整数,但仍然不起作用。
发帖几分钟后,我自己找到了答案。参数应在Integer 中强制转换
$join->on('tbluserprivileges.UserID', '=', DB::raw('CAST(' . $id . ' AS SIGNED)'));