我的数据库中有一个表,它只包含外键。我想创建一个搜索功能,使用关键字过滤数据。
任何人都可以解决这个问题吗?
谢谢。
这是我的表:
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 :(得分:1)
请提供您迄今为止尝试过的内容以了解您的问题。根据我的理解,您可以为vehicle_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();