Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Вечер добрый, подскажите как выбрать из таблицы по option_id и value
имею таблицу:
| item_id | option_id | value |
|---------|-----------|-------|
| 1 | 1 | test1 |
| 2 | 1 | test |
| 3 | 1 | test1 |
| 4 | 2 | test1 |
| 5 | 2 | test |
| 1 | 2 | test2 |
| 2 | 2 | test |
| 3 | 3 | test |
| 3 | 2 | test2 |
| 5 | 3 | test |
делаю двойной выбор (должно получиться item_id [1, 3]):
select('item_id')
->where( function ( $query )
{
$query
->where('option_id', 1)
->where('value', 'test1');
})
->where( function ( $query )
{
$query
->where('option_id', 2)
->where('value', 'test2');
})
->get();
но выдаёт пустой запрос, подскажите как сделать множественный выбор
Не в сети
Если я правильно понял, то:
Model::where(function ($q) {
$q->where('option_id', 1)->where('value', 'test1');
})
->orWhere(function ($q) {
$q->where('option_id', 2)->where('value', 'test2');
})
->pluck('item_id');
Если уникальные ключи нужны, то еще через ->unique() можно прогнать.
Не в сети
Если я правильно понял, то:
Model::where(function ($q) { $q->where('option_id', 1)->where('value', 'test1'); }) ->orWhere(function ($q) { $q->where('option_id', 2)->where('value', 'test2'); }) ->pluck('item_id');
Если уникальные ключи нужны, то еще через ->unique() можно прогнать.
Спасибо, не совсем это должно работать как фильтр, у товара есть параметры, мне нужно выделить те ид которые проходят по запросам
есть ид параметра и значение например:
1=>настольный
2=>чёрный
3=>гарантия
4=>intel
5=>....
мне нужно выбрать тот товар который подойдёт (option_id=1 и value=чёрный) и (option_id=4 и value=intel)
Не в сети
надо выбирать сразу продукты с ->whereHas на options с нужными условиями. подробнее про whereHas в документации
Изменено constb (20.04.2017 08:28:14)
Не в сети
мне нужно выбрать тот товар который подойдёт (option_id=1 и value=чёрный) и (option_id=4 и value=intel)
Ты показал таблицу и сказал, что в твоем примере должны быть выбраны 1 и 3. Именно это запрос и сделает. Если вместо OR ты используешь AND, тогда 3 не будет выбран.
Не в сети
сделал циклом но как я понимаю решение не идеальное
$items_id_arr = [];
foreach ($inp_filters as $key => $val) {
if ($val) {
$query_items_id = ItemOption::select('item_id');
if ($items_id_arr) $query_items_id->whereIn('item_id', $items_id_arr);
$query_items_id->where('option_id', $key);
$query_items_id->where('value', $val);
$items_id_arr = array_flatten(
$query_items_id->get()->toArray()
);
$query_items_id = null;
}
}
Не в сети
надо выбирать сразу продукты с ->whereHas на options с нужными условиями. подробнее про whereHas в документации
если есть возможность помочь то https://laravel.ru/forum/viewtopic.php?id=2257
Не в сети
Страницы 1