Laravel 5.1过滤查询

时间:2015-10-12 12:54:11

标签: sql laravel

我正在开发一个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']);

这个原始查询有效但我怎么能让它变得动态

1 个答案:

答案 0 :(得分:0)

使用laravel可以避免编写过多的sql。首先是一些假设。

  1. 您的模型名为" Project"对于项目表
  2. 从客户端发送的输入中提取数组。
  3. 示例:

    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将根据现有值构建