有三張表
- 研討會(列:id、姓名、電話、電子郵件)
- 服務(列:id,名稱)
- service_workshop(列:id、workshop_id、service_id、活動)
表之間的研討會和服務關系是多對多的。為了在模型中過濾,我使用本地范圍
如何正確撰寫請求?
uj5u.com熱心網友回復:
你能分享結果的完整行嗎?如果我沒有記錯的話。結果是有效的,因為由于第一行或 id (117) 的條件,它回傳了 Workshop_id 2
值為: service_id:1 Workshop_id:2 active:1
這意味著,您有具有活動值的 Workshop_id 2
記住你添加 whereIn [1,2] 只要 service_id 是 1 或 2 就有效
更新 :
為確保它只回傳包含所有 service_id 且狀態為活動的所有 Workshop_id,您需要對其進行分組并添加having條件
試試這個 :
return $query->when(count($services), function ($query) use ($services) {
$query->whereIn('id', function ($query) use ($services) {
$query->select('workshop_id')
->from('service_workshop')
->groupBy('workshop_id')
->where('active', true)
->whereIn('service_id', $services)
->having(DB::raw('count(*)', >=, count($services)));
});
});
MySQL 查詢:
SELECT workshop_id FROM service_workshop WHERE service_id IN (1,2) AND active = 1 GROUP BY workshop_id HAVING COUNT(*) >= 2
注意:將有計數的條件更改為使用條件的長度
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467573.html
上一篇:獲取非重復記錄的最大值
下一篇:轉到php站點中的先例頁面
