2016-07-25 167 views
3

laravel雄辯框架的一點麻煩。WhereNotExists Laravel Eloquent

我需要複製這樣的查詢:

SELECT * 
FROM RepairJob 
WHERE NOT EXISTS (SELECT repair_job_id 
    FROM DismissedRequest 
    WHERE RepairJob.id = DismissedRequest.repair_job_id); 

現在我有

$repairJobs = RepairJob::with('repairJobPhoto', 'city', 'vehicle')->where('active', '=', 'Y')->whereNotExists('id', [DismissedRequest::all('repair_job_id')])->get(); 

任何人的想法?我需要把所有的repairjobs那裏沒有記錄在駁回申請表

我使用上述

Argument 1 passed to Illuminate\Database\Query\Builder::whereNotExists() must be an instance of Closure, string given 
+3

'whereNotExists'接受函數並改變'$ query'。請參閱此處'whereExists'的文檔:https://laravel.com/docs/5.0/queries#advanced-wheres – swatkins

+0

這不是雄辯嗎? – Sytham

回答

2

嘗試doesntHave () 方法。在RepairJob模型中假設'dismissedRequests'爲關係名稱。

$jobs = RepairJob::with('repairJobPhoto', 'city', 'vehicle') 
    ->where('active', 'Y')->doesntHave('dismissedRequests')->get(); 
+0

謝謝您的回覆,但是如果我將這一行代碼更改爲此,則會出現上述更新中提到的錯誤。有任何想法嗎? – Sytham

+0

所以,我想你使用barryvdh/laravel-cors軟件包進行CORS處理。確保您將'cors'中間件應用於路由或組以添加CORS支持。例子:'Route :: group(['middleware'=>'cors'],function(Router $ router){$} router-> get('api','ApiController @ index'); });'。另一種方法是將'cors'添加爲全局中間件,如果您想將其應用於所有路由。 – Phargelm

+0

謝謝,這個代碼是乾淨的和工作,問題是一個語法錯誤:) :) – Sytham

1

查詢時出現此錯誤試試這個:

$repairJobs = RepairJob::with('repairJobPhoto', 'city', 'vehicle')->where('active', '=', 'Y')->whereNotExists(function($query) 
      { 
       $query->select(DB::raw(1)) 
         ->from('DismissedRequest') 
         ->whereRaw('RepairJob.id = DismissedRequest.id'); 
      })->get(); 
+0

得到與來自Phargelm的代碼相同的錯誤,請參閱上面的更新,任何想法?感謝回覆 – Sytham

+0

Yest這是CORS - 正確配置你的服務器(appache,nginx,?)並創建新的問題 - 不要在這裏混合這兩個問題。 –