2016-08-01 2 views
0

내가 뭘 달성하기 위해 노력하고있어하면 다음과 같다 :WhereNotIn 하위 쿼리

내가 같은 client_code은 있지만 낮은/다른 campaign id와 기록이 있는지 확인하고 싶습니다. 나는 지금 하위 쿼리를 사용하고 있는데 나는 그것을 할 시도한뿐만 아니라 참여하지만 이것은 내가 지금 무엇을 가지고 있습니다

작업 논리를 가져올 수 없습니다 :

$oDB = DB::table('campaigns AS c') 
     ->select(
      'c.id AS campaign_id', 
      'cc.id AS campaign_customer_id' 
     ) 
     ->join('campaign_customers AS cc', 'cc.campaign_id', '=', 'c.id') 
     ->where('c.status', '=', ModelCampaign::STATUS_PLANNED) 
     ->where('c.scheduled', '=', 1) 
     ->whereRaw('c.scheduled_at <= NOW()') 
     ->where('cc.status', '=', ModelCampaignCustomer::STATUS_INVITE_EMAIL_SCHEDULED) 
     ->whereNotIn('cc.client_code', '=', function ($query){ 
      $query ->select(DB::raw(1)) 
        ->from('campaign_customers') 
        ->whereRaw('campaign_id', '!=', 'c.id'); 
     }) 
     ->where('cc.active', '=', 1) 
    ; 

어떤 조언을 논리를 작동하는 방법에 대한 정보는 매우 유용 할 것입니다.

답변

0

->toSql(); 메서드를 사용하면 SQL을 볼 수 있으므로 쿼리를 리팩토링 할 수 있습니다.

+0

이 반환 '0 => 배열 : 내부 c'는 CC '에'로 'cc' campaign_customers' 가입''로 campaigns'에서 집합체로서 3 "쿼리"=> "선택 수 (*) 'c'''''''''''''''''''와''c'''는''c'''''''''''' =?와'cc'.'active' =? " "바인딩"=> 배열 : 4 0 => 1 1 => 1 2 => 2 3 => 1 ] "시간"=> 0.51 ] ]' – Taacoo

+0

내가한다고 가정마다 ? 모델에서 나쁜 수익입니까? – Taacoo

+0

아니요, "?" 기호는 한 쿼리에서 다른 쿼리로 변경할 수있는 쿼리 정보입니다. 쿼리에 전달한 변수입니다. –

0

whereNotIn은 아마 =에서하지 말았어야 그것을

->whereNotIn('cc.client_code', function ($query){ 
    .... 

편집

시도 :

->whereNotIn('cc.client_code', function ($query){ 
    $query->select(DB::raw('client_code')) 
      ->from('campaign_customers') 
      ->whereRaw('campaign_id != c.id'); 
    }) 

내가 whereRaw가 하나의 텍스트 문자열해야한다고 생각 아니면 여기 where을 사용할 수 있습니다 (참조 용를 보시오).). 또한 DB::raw(1)은 각 하위 쿼리 결과에 대해 1을 반환하지만 whereNotIn의 ID가 필요합니다.

+0

트릭을 수정했지만하지는 않습니다. 그것은 부모 'c.id'의 가치를 얻는 것 같지 않습니다. 어떤 아이디어? – Taacoo