Laravel запрос отношения один ко многим с опцией LIKE - PullRequest
1 голос
/ 11 ноября 2019

У меня есть такие таблицы

brands
- id
- name
- status (default=1)

products
- id
- brand_id
- name

, и я хочу запросить " ключевое слово ", поэтому оно должно совпадать с " brand.name " или" product.name ". Вот мой текущий запрос, который отлично работает с " brand.name ", но я не уверен, как использовать это с " product.name ".

Brand::where('status', 1)->where('name', 'like', "%{$keyword}%")->get()->sortBy('name')

Это отношения один-ко-многим, поскольку у одного бренда может быть много товаров.

Ответы [ 2 ]

2 голосов
/ 11 ноября 2019

используйте whereHas для поиска в соответствующих моделях. при условии, что имя отношения hasMany равно products.

Brand::where('status', 1)
     ->where(function ($query) use ($keyword) {
         $query->where('name', 'like', "%{$keyword}%")
               ->orWhereHas('products', function ($query) use ($keyword) {
                   $query->where('name','LIKE',"%{$keyword}%");
               });
     })
     ->get();

Полезное чтение: Запрос наличия отношения

1 голос
/ 11 ноября 2019

Попробуйте этот запрос:

Brand::leftJoin('products', 'brands.id', '=', 'products.brand_id')
->where('status', 1)
->whereRaw('brands.name like "%'.$keyword.'%" OR products.name like "%'.$keyword.'%"')
->get()->sortBy('name');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...