Вы запрашиваете продукты, у которых есть опция (через варианты) с именем, которое равно 10 и поднялось одновременно.Конечно, это никогда не может быть правдой.
Вместо этого вам нужно добавить два блока whereHas()
внутри блока whereHas('variants')
, чтобы подтвердить обе опции:
$products = Product::query()
->whereHas('variants', function ($query) {
$query->whereHas('options', function ($query) {
$query->where('options.name', '10');
})
->whereHas('options', function ($query) {
$query->where('options.name', 'rose');
})
->where('inventory_quantity', '>', 0);
})
->orderBy($params['orderBy'], $params['sort'])
->get();
Это буквально читается как:
Дайте мне все продукты, у которых есть хотя бы один вариант, который есть в наличии и имеет как минимум два варианта, один из которых называется 10
, а другой - rose
.