在where子句中使用case语句的laravel查询在条件后追加IS NULL

Ruc*_*chi 3 mysql laravel eloquent

->where([
         'er.id_user_request_to' => $nIdUser
       ])
->where(DB::raw('case WHEN ge.id_user IS NOT NULL THEN ge.id_user = '.$nIdUser.' ELSE 0 END'))
Run Code Online (Sandbox Code Playgroud)

尝试使用以下代码打印查询

$qry = vsprintf(str_replace(array('%', '?'), array('%%', '"%s"'), $oEvents->toSql()), $oEvents->getBindings());
dd($qry);
Run Code Online (Sandbox Code Playgroud)

这会打印一个查询,如

WHERE
(
    `er`.`id_user_request_to` = "6") 
    AND(
         CASE WHEN ge.id_user IS NOT NULL THEN ge.id_user = 6 ELSE 0 END
       )
) **IS NULL**
Run Code Online (Sandbox Code Playgroud)

没有从它在查询结束时添加IS NULL 的地方获取

小智 8

用 whereRaw 替换你的 DB::raw

->where([
     'er.id_user_request_to' => $nIdUser
   ])
->whereRaw(('case WHEN ge.id_user IS NOT NULL THEN ge.id_user = '.$nIdUser.' ELSE 0 END'))
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助