У меня есть две таблицы, items
и item_values
.
items item_values
----- -----------
id item_id
name value_id
Я установил связь между этими двумя таблицами в моей Item
модели.
function values() {
return $this->hasMany(ItemValues::class, "item_id", "id");
}
У меня есть массив, содержащий value_id
, например, например [1, 2, 3, ...]
, и я хочу получить все элементы из таблицы items
, если они существуют в item_values
и если value_id
находится в массиве выше. Я хочу, чтобы это было точное совпадение, поэтому я не хочу, чтобы он отображал все элементы с одним из значений, но я хочу, чтобы они отображали все элементы, которые имеют все значения.
$item = Items::orderBy("created_at", "desc");
if($request->has("values")) {
$appends["values"] = $request->input("values");
$values = $request->input("values");
$findValues = $item->whereHas("values", function($query) use($values) {
foreach($values as $value) {
$query->where("value_id", $value);
}
});
}
$items = $item->paginate(10);
Это работает для одного значения, однако, если я попытаюсь найти несколько значений, он вернет 0 результатов.
Когда я распечатываю запрос, он возвращает:
select * from `items` where exists (select * from `item_values` where `items`.`id` = `item_values`.`item_id` and `value_id` = ? and `value_id` = ?) order by `created_at` desc
Как можно Я добиваюсь того, чего хочу?