У меня есть таблица в моей базе данных, которая содержит только внешние ключи. Я хочу создать функцию поиска для фильтрации данных с помощью ключевых слов.
Может ли кто-нибудь решить это?
Спасибо.
Это моя таблица:
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
Пожалуйста, представьте, что вы пробовали до сих пор, чтобы понять вашу проблему. Согласно тому, что я понял, вы можете создать запрос для 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();