2017-08-09 87 views
0

我想返回所有類別的所有項目。雄辯laravel WhereIn全部

$items = DB::table('items') 
       ->join('catitem_item', 'catitem_item.item_id', '=', 'items.id') 
       ->whereIn('catitem_item.catitem_id', $cats)->paginate(10); 

這個查詢我現在已經返回有1類或2類或3 我需要什麼樣的項目是,有1類和2類和3

我怎樣才能達到這個回報率的項目?

+0

你能擴展你的問題嗎?這很難理解它。你現在輸出什麼? –

回答

0

試試這個:

$items = DB::table('items') 
    ->join('catitem_item', 'catitem_item.item_id', '=', 'items.id') 
    ->whereIn('catitem_item.catitem_id', $cats) 
    ->groupBy('items.id') 
    ->having(DB::raw('count(*)'), '=', count($cats)) 
    ->select('items.*') 
    ->paginate(10); 

隨着HAVING count(*) = 3查詢將只返回擁有所有列出的類別項目。

+0

SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查與您的MariaDB服務器版本相對應的手冊,在「3」附近使用正確的語法。在第1行 –

+0

@TomKur我修復了一些問題。現在就試試。 –

+0

thx它的工作,但我仍然需要加入與其他項目有多對多的關係,我認爲HAVING count(*)= 3變得無效,因爲會有超過3個項目的數量,任何想法有什麼變化我應該對查詢做出什麼? –

0

像這樣嘗試: 其中$ cats = [1,2,3];

$items = DB::table('items') 
->join('catitem_item', 'catitem_item.item_id', '=', 'items.id') 
->whereIn('catitem_item.catitem_id', $cats) 
->paginate(10); 

其返回的項目類別1和2和3.這意味着它用於AND opration。

+0

列值不能同時等於三個不同的值。 'x = 1 AND x = 2 AND x = 3'總是FALSE。所以你的查詢永遠不會返回任何行。 –

+0

是啊,你是對的,當我們想要所有類別,那麼我們會像上面那樣做。 – gaurav