2017-08-02 214 views
-1

我有一個表在我的數據庫,其中只包含外鍵過濾外鍵數據。我想創建一個搜索功能來使用關鍵字過濾數據。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 
+0

發佈您的代碼,你試過這算什麼! –

+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(); 
+0

這是可行的。但我需要一個參數來搜索品牌,型號和變體。而不是$ make_name,$ model_name,$ variant_name。我怎樣才能做到這一點? –

+0

看到我更新的答案:) –

+0

$用戶 - >在哪裏( 'make_table.name', '像', '%' $搜索 '%'。) - > orWhere( 'model_table.name', '喜歡', 。 '%' $搜索 '%') - > orWhere( 'variant_table.name', '象', '%' $搜索 '%')。; 我做這樣的,但它的工作對一個字。我想一次搜索製作,模型和變體。它沒有考慮多個詞。 –