где точная фильтрация - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь получить весь продукт из базы данных, а также отфильтрую эту базу по request parameters
, поэтому я создаю Models, например Product, Property, Attribute.и создайте many to many отношения между Product and Property, Product and Attribute.

это часть моего запроса:

$products = Product::where('status', 'accept')

        ->when(request('properties'), function ($query) {
            return $query->whereIn('id', request('properties'));
        })
        ->when(request('attributes'), function ($query) {
            return $query->whereIn('id', request('attributes'));
        })->get();

, поэтому здесь нет ошибок, но я хочу здесь изменить идею фильтрации атрибутов.

Я хочу изменить whereIn фильтрацию на whereExact фильтрацию.вот где я отправляю request('attributes') по значению [1,2] на этот запрос, я ожидаю, что результат должен быть:

Все товары, которые имеют атрибут по id = 1 И атрибут по идентификатору= 2

1 Ответ

0 голосов
/ 18 ноября 2018

Попробуйте использовать foreach с whereHas():

$products = Product::where('status', 'accept')
    ->when(request('properties'), function ($query) {
        foreach(request('properties') as $id){
            $query->whereHas('properties', function($query) use ($id){
                $query->where('id', $id);
            });
        }
    })
    ->when(request('attributes'), function ($query) {
        foreach(request('attributes') as $id){
            $query->whereHas('attributes', function($query) use ($id){
                $query->where('id', $id);
            });
        }
    })->get();

Первый аргумент whereHas() должен быть именем метода отношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...