2016-07-25 3 views
3

laravel에 대한 웅변적인 프레임 워크에 약간의 문제가 있습니다. 내가WhereNotExists Laravel Eloquent

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

누구나 아이디어가 지금

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(function($query) 
      { 
       $query->select(DB::raw(1)) 
         ->from('DismissedRequest') 
         ->whereRaw('RepairJob.id = DismissedRequest.id'); 
      })->get(); 
+3

'whereNotExists'는 함수를 취해'$ query'를 변경합니다. 'whereExists'에 대한 문서는 https://laravel.com/docs/5.0/queries#advanced-wheres – swatkins

+0

을 참고하십시오. – Sytham

답변

2

시도 doesntHave을 : 대한 기록이

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

답장을 보내 주셔서 감사합니다. 단,이 코드를 한 줄만 변경하면 위의 업데이트에서 언급 한 오류가 발생합니다. 어떤 아이디어? – Sytham

+0

그래서 CORS 처리를 위해 barryvdh/laravel-cors 패키지를 사용한다고 생각합니다. CORS 지원을 추가하려면 루트 또는 그룹에 'cors'미들웨어를 적용해야합니다. 예 :'Route :: group ([ 'middleware'=> 'cors'], function (Router $ router) { $ router-> get ('api', 'ApiController @ index'); }); 또 다른 방법은'cors'를 모든 미들웨어에 적용하고 싶다면 글로벌 미들웨어로 추가하는 것입니다. – Phargelm

+0

감사합니다.이 코드는 깨끗하고 작동합니다. 문제는 구문 오류입니다 :) :) – Sytham

1

위의 쿼리를 사용하는 경우

내가이 오류를 얻을 기각 요청 테이블이없는 경우 나는이 시도하는 모든 repairjobs을 얻을 필요() 메소드를 호출합니다. RepairJob 모델에서 'dismissedRequests'를 관계 이름으로 가정합니다.

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

Phargelm의 코드와 동일한 오류가 발생했습니다. 위의 업데이트를 참조하십시오. 회신을 보내 주셔서 감사합니다 – Sytham

+0

이것이 CORS입니다 - 올바르게 서버 (appache, nginx,?)를 구성하고 새로운 질문을 만드십시오. 여기에이 두 가지 질문을 섞지 마십시오. –