2016-12-14 65 views
0

我打印下面的SQL查詢中Laravel爲空在年底laravel查詢級聯

$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 

爲什麼有is null在在最後的SQL查詢甚至我沒有寫?

+2

我認爲你應該使用whereRaw代替 – vijaykumar

+0

@vijaykumar感謝隊友。 。 。 .. 有效。 .. –

回答

2

where函數需要第二個參數,並且您沒有提供,第二個參數的默認值是null,這就是爲什麼is null附加到您的查詢。您可以使用whereRaw函數來解決您的問題。

+0

感謝伴侶..... :-) –

2

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或第2和第3個參數這就是爲什麼它被顯示爲空。相反,您可以嘗試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();