Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 19.04.2017 20:03:37

Множественный выбор из таблицы по key value

Вечер добрый, подскажите как выбрать из таблицы по 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();

но выдаёт пустой запрос, подскажите как сделать множественный выбор

Не в сети

#2 19.04.2017 20:38:28

Re: Множественный выбор из таблицы по key value

Если я правильно понял, то:

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() можно прогнать.

Не в сети

#3 19.04.2017 23:10:21

Re: Множественный выбор из таблицы по key value

AlexeyMezenin пишет:

Если я правильно понял, то:

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)

Не в сети

#4 20.04.2017 08:28:06

Re: Множественный выбор из таблицы по key value

надо выбирать сразу продукты с ->whereHas на options с нужными условиями. подробнее про whereHas в документации

Изменено constb (20.04.2017 08:28:14)

Не в сети

#5 20.04.2017 08:48:56

Re: Множественный выбор из таблицы по key value

Сергей пишет:

мне нужно выбрать тот товар который подойдёт (option_id=1 и value=чёрный) и (option_id=4 и value=intel)

Ты показал таблицу и сказал, что в твоем примере должны быть выбраны 1 и 3. Именно это запрос и сделает. Если вместо OR ты используешь AND, тогда 3 не будет выбран.

Не в сети

#6 20.04.2017 20:54:25

Re: Множественный выбор из таблицы по key value

сделал циклом но как я понимаю решение не идеальное

        $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;
            }
        }

Не в сети

#7 20.04.2017 20:56:09

Re: Множественный выбор из таблицы по key value

constb пишет:

надо выбирать сразу продукты с ->whereHas на options с нужными условиями. подробнее про whereHas в документации

если есть возможность помочь то https://laravel.ru/forum/viewtopic.php?id=2257

Не в сети

Подвал раздела