2016-12-25 111 views
1

我有兩個不同的laravel查詢,我想基於第一個查詢使用whereNotIn第二個查詢。但whereNotIn似乎不工作,因爲數據仍然顯示。laravel where不在工作

這第一個查詢

$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

這是什麼'DD($ detailservice);'說明了什麼? –

+0

嗨,我編輯我的問題添加'dd($ detailservice)' – rafitio

+0

謝謝。請檢查下面的答案。 –

回答

1

你的代碼工作得很好。首先,得到ID不是1的結果(因此得到2),然後返回ID不是2的結果(返回ID爲1的對象)。

如果你想要得到的結果,其中ID不是1或2,使用這個代替foreach()

$services = Service::whereNotIn('id', $data->pluck('service_id'))->get(); 
+0

嗨,它的工作,但我得到另一個麻煩。現在結果不顯示ID 1或ID 2,因爲當我是'dd($ data-> pluck('service_id'));'結果是'#items:array:12 [▼ 0 => 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