我有一個名為support_tags. 這是一個包含一個簡單陣列的 jsonb 列,如下所示:
[
"caring",
"budgets",
"careers_employment",
"addictions"
]
我正在嘗試使用以下內容查詢此列:
$services = \App\Models\Service::where("status", "accepted")->whereRaw("JSON_CONTAINS(support_tags, '" . json_encode($categories) . "')")->get();
這不會檢索我希望/期望的結果。如果我發送以下陣列:
[
"caring",
"smoking"
]
我得到的結果是包含所有陣列元素的服務。我需要它更像 a whereIn,因為不是所有的陣列值都需要出現在資料庫列中,而是一個或多個。如果有人知道這樣做的方法,我將不勝感激。謝謝。
uj5u.com熱心網友回復:
你可以使用這些雄辯的方法:->whereJsonContains()和->orWhereJsonContains()
您的查詢將是這樣的:
$services = \App\Models\Service::where("status", "accepted")
->where(function($query) {
$query->whereJsonContains('support_tags', 'smoking')
->orWhereJsonContains('support_tags', 'caring');
});
uj5u.com熱心網友回復:
就在我接受這個問題的另一個答案之前,我認為分享我基于已接受答案的實作可能會很有用 這就是訣竅:
$categories = request()->infoAdviceCategories;
$services = [];
if (count($categories)) {
$services = \App\Models\Service::where("status", "accepted")->whereJsonContains("support_tags", $categories[0]);
foreach ($categories as $category) {
if ($category !== $categories[0]) {
$services->orWhereJsonContains("support_tags", $category);
}
}
$services = $services->get();
}
return $services;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/374957.html
上一篇:在Laravel中找不到類“PhpOffice\phpspreadsheet\src\PhpSpreadsheet\Spreadsheet”
