2016-12-28 12 views
1

Iデータベース内のテーブルの列の一部を検索するために使用する検索ボックスがあります。ここにコードがありますLaravelのネストされたクエリ5.2

$project = Project::findOrFail($id); 
    $file = \App\File::find($file); 
    $query = $request->input('q');     
    $materials = $query 
     ?\App\Material::where('file_id', '=', $file->id) 
         ->where('material_name', 'LIKE', "%$query%")->get() 
     :\App\Material::where('file_id', '=', $file->id)->get(); 


    return view('projects.file',compact('project', 'file', 'materials')); 

このページの読み込み時にデータがフィルタリングされ、このプロジェクトの項目だけが表示されます。しかし、検索が完了すると、テーブル全体が検索されます。どのようにして、特定のプロジェクトのアイテムだけを検索し、テーブルのアイテム全体を検索することはできませんか?

答えて

2

ネストすることができ、あなたの検索項目をこの方法:

public function handle($request, Closure $next) 
{ 
    $project = Project::findOrFail($id); 

    $file = \App\File::find($file); 

    $materials = \App\Material::newQuery(); 

    // Did it found the file?  
    if ($file) { 
     // Search for the file 
     $materials->where('file_id', '=', $file->id); 
    } 

    // AND, does it have a query to search? 
    if ($search_item = $request->input('q')) { 
     // Search for the query 
     $materials->where('material_name', 'LIKE', "%$search_item%"); 
    } 

    // AND, does it have a project to filter? 
    if ($search_item = $request->input('project')) { 
     // Filter the project 
     $materials->where('project', 'LIKE', "%$search_item%"); 
    } 

    // Now go get the results 
    $materials = $materials->get(); 

    // And return to the view 
    return view('projects.file',compact('project', 'file', 'materials')); 
} 
+0

これが問題の一部を解決します。すべての場合(検索ボックスからの入力の有無にかかわらず)、テーブル内の$ fileの値を検索したいのですが、入力があれば、$ fileと "%$ search_item%"をテーブル –

+0

これはこれを正確に解決しています。 $ファイルがある場合は、ファイルがあるかどうかを検索し、入力がある場合はプロジェクトのプロジェクト検索がある場合は入力を検索してください! –

+0

説明を追加しました。コードにはELSEはありませんので、すべてANDです。 –

関連する問題