Php Laravel 5.2中的嵌套查询
我有一个搜索框,我想用它来搜索数据库中表的某些列。这是密码Php Laravel 5.2中的嵌套查询,php,laravel,eloquent,laravel-5.2,Php,Laravel,Eloquent,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)
$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'));
页面加载时的数据将被过滤,以仅显示此项目中的项目。但搜索完成后,它会搜索整个表。如何使其仅搜索特定项目中的项目,而不搜索表中的全部项目?您可以通过以下方式嵌套搜索项目:
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'));
}
这解决了部分问题。在所有情况下(无论是否从搜索框输入),我都想让它在表中查找$file值,当有输入时,它应该在表中查找$file和“%$search_item%”。这正是解决这个问题的方法。如果它有一个$文件,搜索文件,如果它有输入,搜索输入,如果它有项目,搜索项目!添加了一些注释进行解释。代码中没有其他内容,因此它是全部。