Поиск по нескольким таблицам

У меня есть 3 таблицы, которые связаны / имеют отношение.

  1. В таблице сообщений много тегов и одна категория.
  2. В таблице категорий много сообщений
  3. В таблице тегов много сообщений

Мне нужна функция поиска, я знаю, как искать только сообщения (на основе заголовка).

Я попытался найти каждую таблицу с помощью Where в моем контроллере, но все равно не повезло.

public function Search(Request $request)
    {
        $search = $request->search;
        $posts = post::where('title', 'like', "%{$search}%")->paginate(5);

        return view('search', compact('posts'))->with('result', $search);
    }

Например

У меня есть сообщение с заголовком «Тест», с категорией «Tost» и с тегами «Tast and Tust».

поэтому, если я набираю заголовок, категорию или теги, я хочу, чтобы они отображались. как я могу этого добиться?


person Bonex    schedule 18.04.2019    source источник
comment
это сообщение :: where () не сообщение :: where ()   -  person Safak Ciplak    schedule 18.04.2019
comment
Вы изучали функцию orWhere ()? Вы можете объединить свои таблицы и сделать что-то вроде orWhere ('category.name', 'LIKE', '% data%');   -  person ImJT    schedule 18.04.2019


Ответы (2)


Попробуйте использовать метод whereHas (для получения дополнительной информации см. https://laravel.com/docs/5.8/eloquent-relationships#querying-relations)

Так получилось бы что-то вроде:

Post::query()
  ->where('title', 'like', "%$search%")
  ->orWhereHas('categories', function ($query) use ($search) {
    $query->where('name', 'like', "%$search%");
  })

person Mark van Duijker    schedule 18.04.2019
comment
Спасибо, это работает, это странно, что я уже пробовал это вчера вечером, но не работает, но теперь он работает, ха-ха, большое спасибо, сэр. - person Bonex; 19.04.2019

Вы должны использовать вот так.

Post::where('title', 'like', '%' . Input::get('search') . '%')->get();
person Safak Ciplak    schedule 18.04.2019
comment
Спасибо за это, но это не мой вопрос, я уже могу искать в таблице сообщений. Мне нужно искать не только по заголовку сообщения, но и по категории или тегам. поэтому, если я набираю или ввожу категорию / тег / заголовок при поиске, он выводит все сообщения, связанные с ним. Извините, если мой английский плохой, надеюсь, вы это понимаете: D - person Bonex; 18.04.2019
comment
Нет никакой разницы между его и вашим, кроме того, что вы разделяете свои подстановочные знаки и переменную точками и не разбиваете коллекцию на страницы. - person ImJT; 18.04.2019