Laravel用backtick包装int参数



在我的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)'));

相关内容

最新更新