is null 在 laravel 查询的末尾连接

is null is concatenated at end in laravel query

我正在 Laravel

中打印下面的 Sql 查询
$CheckIfAssigned = Projects::select(DB::Raw('count(projects.id) as projects'))
                ->leftJoin('project_team as pt', 'projects.id', '=', 'pt.project_id')
                ->where(DB::Raw('(projects.id = '.$projectId.') AND ( project_manager_id = '.$LoggedInUserId.' OR pt.employee_id = '.$LoggedInUserId.')'))->toSql();

我得到的结果是:

select count(projects.id) as projects from `projects` left join
 `project_team` as `pt` on `projects`.`id` = `pt`.`project_id` 
where (projects.id = 13) AND ( project_manager_id = 9 OR pt.employee_id = 9) is null

为什么我没写,Sql查询最后还有is null

where 函数需要第二个参数,而你没有提供,第二个参数的默认值是 null,这就是 is null 附加的原因您的查询。您可以使用 whereRaw 函数来解决您的问题。

Laravel 其中 需要三个参数。第一个参数是列的名称。第二个参数是一个运算符,它可以是数据库支持的任何运算符。最后,第三个参数是根据列检查 here

评估的值
Projects::select(DB::Raw('count(projects.id) as projects'))
                ->leftJoin('project_team as pt', 'projects.id', '=', 'pt.project_id')
                ->where(DB::Raw('(projects.id = '.$projectId.') AND ( project_manager_id = '.$LoggedInUserId.' OR pt.employee_id = '.$LoggedInUserId.')'))->toSql();

在您上面的代码中,您没有传递 2 或第二个和第三个参数,这就是它显示为空的原因。相反,您可以尝试 whereRaw 此处 whereRaw 将接受查询。

 Projects::select(DB::Raw('count(projects.id) as projects'))
                ->leftJoin('project_team as pt', 'projects.id', '=', 'pt.project_id')
                ->whereRaw('projects.id = ' .$projectId. ' AND ( project_manager_id = ' .$LoggedInUserId. ' OR pt.employee_id = ' . $LoggedInUserId)->toSql();