2016-12-25 1 views
1

두 개의 다른 laravel 쿼리가 있는데 첫 번째 쿼리를 기반으로 whereNotIn과 함께 두 번째 쿼리를 사용하려고합니다. 아직 데이터가 표시되어 있기 때문에 whereNotIn이 작동하지 않는 것 같습니다. laravel whereNotIn not working

이 첫 번째 쿼리

$detailservice = DetailServiceOrder::leftJoin('services', 'detail_service_orders.service_id', '=', 'services.id') 
    ->select('detail_service_orders.*', 
     'services.service_name') 
    ->where('sales_order_id', $id) 
    ->get(); 

이 두 번째 쿼리

foreach ($detailservice as $data) {    
     $service[] = Service::whereNotIn('id', [$data->service_id])->get();  
    } 

    dd($service); 

여기 내 dd($service) 결과 샘플

#attributes: array:4 [▼ 
     "id" => 2 
     "service_name" => "Mail Service" 
     "created_at" => "2016-11-26 02:15:24" 
     "updated_at" => "2016-11-26 02:15:24" 
    ] 
#attributes: array:4 [▼ 
     "id" => 1 
     "service_name" => "Network Maintenance" 
     "created_at" => "2016-11-15 07:00:45" 
     "updated_at" => "2016-11-15 07:00:45" 
    ] 

여기 내 dd($detailservice) 결과 샘플

#attributes: array:10 [▼ 
    "sales_order_id" => 6 
    "service_id" => 1 
    "order_type" => "add" 
    "select_plan" => "test 1" 
    "qty" => 2 
    "unit_price" => 200.0 
    "note" => "testing 1" 
    "updated_at" => "2016-12-22 01:34:00" 
    "created_at" => "2016-12-22 01:34:00" 
    "service_name" => "Network Maintenance" 
    ] 
#attributes: array:10 [▼ 
    "sales_order_id" => 6 
    "service_id" => 2 
    "order_type" => "change" 
    "select_plan" => "test 2" 
    "qty" => 3 
    "unit_price" => 400.0 
    "note" => "testing 2" 
    "updated_at" => "2016-12-22 01:34:00" 
    "created_at" => "2016-12-22 01:34:00" 
    "service_name" => "Mail Service" 
    ] 

위의 dd($service) 결과는 두 번째 쿼리에서 필터링 되었기 때문에 표시해서는 안됩니다.

+0

,'쇼를? –

+0

안녕하세요, 내 질문에'dd ($ detailservice)'를 추가했습니다. – rafitio

+0

감사합니다. 아래 답변을 확인하십시오. –

답변

1

코드가 올바르게 작동합니다. 먼저 ID가 1이 아닌 결과를 얻습니다. (그래서 2를 얻습니다.) 그런 다음 ID가 2가 아닌 결과를 반환합니다 (ID가 1 인 객체를 반환).

ID가 1 또는 2없는 경우에는 당신이 결과를 얻고 싶은 경우에

foreach() 대신이를 사용

`DD ($의 detailservice를) 무엇을
$services = Service::whereNotIn('id', $data->pluck('service_id'))->get(); 
+0

안녕하세요. 작동하지만 다른 문제가 있습니다. 결과가'#items : array : 12 [▼ 0 =>] 일 때 ID 1 또는 ID 2가 표시되지 않았습니다. 결과는'dd ($ data-> pluck ('service_id')) 1 1 => 1 2 => 1 3 => 1 4 => 1 5 => 1 6 => 2 7 => 2 8 => 2 9 => 2 10 => 2 11 => 2 ] – rafitio

+0

귀하의 의견에 대한 질문을 이해할 수 없었습니다. 다시 말해주십시오. –

+0

현재 서비스를 표시하지 않습니다. 왜냐하면'$ data-> pluck ('service_id')를 디버깅 할 때'service_id' 값은'1'과'2'입니다. 즉, ID 1 또는 ID 2는 필터링하지 않지만 ID 1 및 ID 2는 필터링되므로 모든 데이터가 표시되지 않습니다. CMIIW – rafitio