我正在开发一个Laravel 5.1项目。 我正在制作一个过滤选项来显示项目结果。
有一个按名称搜索的输入过滤器 并选择项目状态
请求由AjaxRequest发送到控制器中的方法Filter。 在这个过滤器方法中,我收到带有过滤器选项的数组
Array
(
[filterName] => projectNameHere...
)
这是用户仅按项目名称
过滤它的时间当用户按项目名称和状态
搜索时,这是数组Array
(
[filterName] => projectNameHere...
[selectValue] => projectStatusHere
)
但现在我需要为此创建一个动态选择查询。我尝试了以下事项:
$query = 'SELECT * FROM project';
$cond = array();
$params = array();
if (array_key_exists('filterName', $request->all()))
{
$cond[] = 'naam LIKE = %?%';
$params[] = $request->filterName;
}
if (array_key_exists('selectValue', $request->all()))
{
$cond[] = 'project_status = ?';
$params[] = $request->selectValue;
}
// Implode the query
$query .= ' WHERE ' . implode(' AND ', $cond);
还尝试使用Laravel Raw select query ::
$projects = DB::select('select * from project where name = ? AND project_status = ?', ['projectName', 'projectStats']);
这个原始查询有效但我怎么能让它变得动态
答案 0 :(得分:0)
使用laravel可以避免编写过多的sql。首先是一些假设。
示例:
public function performSearch(Request $req) {
//create a new query builder (true to ignore deleted)
$query = Project::query();
if($req->has('filterName')) {
$query = $query->where('filterName','like','%'.$req->input('filterName').'%');
}
if($req->has('selectValue')) {
$query = $query->where('project_status ','=',$req->input('selectValue'));
}
//execute
$results = $query->get();
}
$query
将根据现有值构建