Поиск по полю в связанной / объединенной таблице с помощью Laravel query builder

#php #html #mysql #laravel

#php #HTML #mysql #laravel

Вопрос:

У меня есть две таблицы: бренды и модели. Таблица брендов содержит идентификатор для каждой марки и название. Таблица моделей имеет идентификатор модели и внешний ключ для каждого идентификатора бренда и названия модели.

введите описание изображения здесь

Вот таблица модели, где «cod_marca» — это внешний ключ, а «modelo» — это имя модели.

введите описание изображения здесь

И здесь у меня есть таблица брендинга, где «cod_marca» — это идентификатор, а «marca» — это имя.

Я хочу, чтобы пользователь выполнял поиск по названию каждой марки, и все должно быть указано в соответствии с «cod_marca», то есть, если пользователь ищет «Chevrolet», я хочу, чтобы отображались модели с идентификатором «1».

Вот мой код поиска:

 public function buscar(Request $request) {
    $model = $request->get('marca');
    $models = DB::table('marcas')->where('marca', 'like', '%' . $marca . '%')->paginate(5);

    return view('buscar', ['models' => $models]);
}
  

Код формы является общим, я просто использовал a <select> с названием бренда.

Комментарии:

1. Это было бы немного проще, если бы у вас были модели для каждой таблицы с определенными отношениями между ними. А вы?

2. Связь между таблицей моделей и таблицей брендов — это столбец «cod_marca».

3. Я понимаю, но есть ли у вас модели для каждой таблицы с отношениями , связывающими эти модели? Вы можете использовать query builder ( DB::table(...... ), но было бы намного проще, если бы у вас были настроены модели. Мне просто интересно, есть ли они у вас или нет

4. Нет, у меня есть только таблица models, которая связана с таблицей brands.

Ответ №1:

Лично я предпочитаю создавать модели для каждой таблицы с отношениями, связывающими эти модели, и использовать Eloquent для извлечения результатов.

Тем не менее, вы можете делать то, что хотите, используя метод объединения построителя запросов следующим образом:

 public function buscar(Request $request) {
    $model = $request->get('marca');
    $models = DB::table('models ')
        ->join('marcas', 'models.cod_marca', '=', 'marcas.cod_marca')
        ->select('models.cod_modelo', 'models.cod_marca', 'models.modelo', 'marcas.marca')
        ->where('marcas.marca', 'like', '%' . $marca . '%')
        ->paginate(5);
    return view('buscar', ['models' => $models]);
}