Laravel搜索功能,用于按关键字过滤外键数据

时间:2017-08-02 05:06:58

标签: laravel

我的数据库中有一个表,它只包含外键。我想创建一个搜索功能,使用关键字过滤数据。

任何人都可以解决这个问题吗?

谢谢。

这是我的表:

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

1 个答案:

答案 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();