2014-09-13 2 views
1

내가 할 노력하고있어 가입 고급 다음 조인웅변 어디 고급 내에는

Missing argument 2 for Illuminate\Database\Query\JoinClause::where() 

내가이 쿼리를 구성하려면 어떻게 :

Schedules::select() 
    ->leftJoin('histories', function ($j) 
     { 
      $j->on('histories.schedule_id', '=', 'schedules.id') 
       ->where('histories.test', '=', DB::raw('schedules.test')) 
       ->where(function ($q) 
       { 
        $q->where('histories.order_id', '=', 'schedules.order_id') 
         ->orWhere('histories.customer_id', '=', DB::raw('schedules.customer_id')); 
       }); 
     }); 

내가, Laravel는 오류를보고 Eloquent 구문을 사용하면 join 문에 대해 다음과 같은 결과를 얻을 수 있습니까?

left join histories 
    on histories.schedule_id = schedules.id 
     and histories.test = schedules.test 
     and (
      histories.order_id = schedules.order_id 
      or histories.customer_id = schedules.customer_id 
     ) 

답변

2

불행하게도 JoinClausewhere 일반 where 절처럼 작동하지 않습니다, 당신은 당신의 조건의 일부를 반복해야합니다, 그래서 당신은 중첩 된 알의에 대한 폐쇄를 전달할 수 없습니다.

또한 추가 조인 항목에 whereDB::raw이 필요하지 않으므로 on을 다시 사용하십시오.

$j->on('histories.schedule_id', '=', 'schedules.id') 
    ->on('histories.test', '=', 'schedules.test') 
    ->on('histories.order_id', '=', 'schedules.order_id') 

    ->orOn('histories.schedule_id', '=', 'schedules.id') 
    ->on('histories.test', '=', 'schedules.test') 
    ->on('histories.customer_id', '=', 'schedules.customer_id'); 
:

그래서 기본적으로 당신이 필요합니다