使用Laravel or_where()搜索

时间:2018-09-11 13:40:29

标签: php laravel

我的目标是使用Laravel搜索姓氏和名字。在编写代码时,它会搜索名字姓氏,我想要做的就是让它同时搜索名字。我该怎么办?

PHP-搜索语句

public function search($search_input) {
   $response = DB::table(self::$table)
          ->select(array(
            'ID',
            'User_ID',
            'Signup_Date',
            'First_Name',
            'Last_Name',
             DB::raw('CONCAT(First_Name," ",Last_Name) AS Name')
        ))
        ->where('First_Name', 'LIKE', '%'.$search_input.'%')
        ->or_where('Last_Name', 'LIKE', '%'.$search_input.'%')
        ->where_not_null('User_ID')
        ->order_by('Signup_Date', 'desc')
        ->get();
   return $response;
}

编辑:我忘了包括我们正在使用Laravel 3。https://laravel3.veliovgroup.com/docs/database/fluent

2 个答案:

答案 0 :(得分:1)

如果您同时搜索名字和姓氏,那么我怀疑它会返回结果。因为这将意味着搜索查询将必须匹配一条记录,该记录的输入就像名字和名字一样。我认为您实际追求的是更多复合搜索。当查询中包含选择项时,您也许可以执行以下操作。

public function search($search_input) {
  $response = DB::table(self::$table)
      ->select(array(
        'ID',
        'User_ID',
        'Signup_Date',
        'First_Name',
        'Last_Name',
         DB::raw('CONCAT(First_Name," ",Last_Name) AS Name')
    ))
    ->where('Name', 'LIKE', '%'.$search_input.'%')
    ->where_not_null('User_ID')
    ->order_by('Signup_Date', 'desc')
    ->get();
   return $response;
}

这应该起作用,因为Name是由CONCAT函数设置的。

答案 1 :(得分:1)

据我了解,您的查询条件是

(First_Name LIKE "%xx%" OR Last_name LIKE "%xx%") AND User_id IS NOT NULL

您应按以下方式修改查询以使用nested where clauses

public function search($search_input) {
   $response = DB::table(self::$table)
          ->select(array(
            'ID',
            'User_ID',
            'Signup_Date',
            'First_Name',
            'Last_Name',
             DB::raw('CONCAT(First_Name," ",Last_Name) AS Name')
        ))
        ->where(function($query) use ($search_input) {
             $query->where('First_Name', 'LIKE', '%'.$search_input.'%')
             ->or_where('Last_Name', 'LIKE', '%'.$search_input.'%');
        }
        ->where_not_null('User_ID')
        ->order_by('Signup_Date', 'desc')
        ->get();
   return $response;
}