Функция поиска Laravel для фильтрации данных внешнего ключа по ключевым словам

-2

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

Может ли кто-нибудь решить это?

Спасибо.

Это моя таблица:

vehicle_table:

id | model_id | variant_id
1  | 1        | 1 

model_table:

id | make_id | name 
1  | 1       | Beat

make_table:

id | name 
1  | Chevrolet

variant_table:

id | name 
1  | 1.0 PS
  • 0
    Разместите свой код, что вы пытались для этого!
  • 0
    Можете ли вы добавить детали о внешнем ключе и структурах таблиц в деталях?
Теги:

1 ответ

1
Лучший ответ

Пожалуйста, представьте, что вы пробовали до сих пор, чтобы понять вашу проблему. Согласно тому, что я понял, вы можете создать запрос для car_table и присоединиться к таблице других пользователей и сделать свои фильтры, как показано ниже:

$vehicles = DB::table('vehicle_table')
            ->select('model_table.name as model_name', 'make_table.name as make_name', 'variant_table.name as variant_name')
            ->leftJoin('model_table','model_table.id','=', 'vehicle_table.model_id')
            ->leftJoin('make_table','make_table.id','=', 'model_table.make_id')
            ->leftJoin('variant_table','variant_table.id','=', 'vehicle_table.variant_id');
if($make_name){
    $vehicles->where('make_table.name', 'like', '%' . $make_name . '%');
}

if($model_name){
    $vehicles->where('model_table.name', 'like', '%' . $model_name . '%');
}

if($variant_name){
    $vehicles->where('variant_table.name', 'like', '%' . $variant_name . '%');
}

$results = $vehicles->get();

$make_name, $model_name, $variant_name будут вашими значениями формы поиска.

--UPDATE-- Если вы хотите искать строку (более одного слова) через все таблицы, вы можете сделать следующее:

$words = explode(' ', $search);
$vehicles = DB::table('vehicle_table')
                ->select('model_table.name as model_name', 'make_table.name as make_name', 'variant_table.name as variant_name')
                ->leftJoin('model_table','model_table.id','=', 'vehicle_table.model_id')
                ->leftJoin('make_table','make_table.id','=', 'model_table.make_id')
                ->leftJoin('variant_table','variant_table.id','=', 'vehicle_table.variant_id');
foreach($words as $word){
    $vehicles->where('make_table.name', 'like', '%' . $word. '%');
    $vehicles->orWhere('model_table.name', 'like', '%' . $word. '%');
    $vehicles->orWhere('variant_table.name', 'like', '%' . $word. '%');
}    
$results = $vehicles->get();
  • 0
    Это работает. Но мне нужен один параметр для поиска по марке, модели и варианту. вместо $ make_name, $ model_name, $ option_name. Как я могу это сделать?
  • 0
    Смотрите мой обновленный ответ :)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню