【问题标题】:Laravel Query Builder - where(1=1) getting errorLaravel 查询生成器 - where(1=1) 出现错误
【发布时间】:2015-12-13 07:32:32
【问题描述】:

我正在尝试将这个 PHP MySQL 查询构建到 Laravel 查询构建器:

$sql = "SELECT employee_name, employee_salary, employee_position, employee_city, employee_extension, DATE_FORMAT(employee_joining_date, '%Y-%m-%d') as employee_joining_date, employee_age ";
$sql .= " FROM employee WHERE 1=1";
if (!empty($EmployeeNameSeach) ) {
    $sql .=" AND  employee_name LIKE '".$EmployeeNameSeach."%' ";    
}
if (!empty($SalarySeach)) {
    $sql .= " AND  employee_salary LIKE '".$SalarySeach."%' ";
}
if (!empty($PositionNameSeach) ) {
    $sql .= " AND  employee_position LIKE '".$PositionNameSeach."%' ";
}
if (!empty($CitySeach) ) {
    $sql .= " AND  employee_city LIKE '".$CitySeach."%' ";
}
if (!empty($ExtensionSeach) ) {
    $sql .= " AND  employee_extension LIKE '".$ExtensionSeach."%' ";
}
if (!empty($JoiningDataSeach) ) {
    $sql .= " AND  employee_joining_date LIKE '".$JoiningDataSeach."%' ";
}
if (!empty($AgeSeach) ) {
    $sql .= " AND  employee_age LIKE '".$AgeSeach."%' ";
}

而我正在做的是-

    $baseQuery  =   DB::table('employee')->select('employee_name', 'employee_salary', 'employee_position', 'employee_city', 'employee_extension',"employee_joining_date", 'employee_age', 'employee_id');
                        //->select('name as user_name', 'email')

    //Applying Filters
    $query  =   $baseQuery->where(1, '=', 1);
    if(!empty($EmployeeNameSeach))
        $query  =   $query->orWhere('employee_name', 'LIKE', '%'.$EmployeeNameSeach.'%');
    if(!empty($SalarySeach))
        $query  =   $query->orWhere('employee_name', 'LIKE', '%'.$SalarySeach.'%');
    if(!empty($PositionNameSeach))
        $query  =   $query->orWhere('employee_name', 'LIKE', '%'.$PositionNameSeach.'%');
    if(!empty($CitySeach))
        $query  =   $query->orWhere('employee_name', 'LIKE', '%'.$CitySeach.'%');
    if(!empty($ExtensionSeach))
        $query  =   $query->orWhere('employee_name', 'LIKE', '%'.$ExtensionSeach.'%');
    if(!empty($JoiningDataSeach))
        $query  =   $query->orWhere('employee_name', 'LIKE', '%'.$JoiningDataSeach.'%');
    if(!empty($AgeSeach))
        $query  =   $query->orWhere('employee_name', 'LIKE', '%'.$AgeSeach.'%');

    //Ordering and Limiting Current data
     $query =   $query->orderBy($columns[$column_index_for_ordering], $column_ordering_direction)
                ->skip($start_data_index)->take($per_page_content_number);
     $data          =   $query->get();

所以我得到了错误-

    $query  =   $baseQuery->where(1, '=', 1);

谁能帮帮我? 谢谢。

【问题讨论】:

    标签: php laravel laravel-4 laravel-5 query-builder


    【解决方案1】:

    你没有发布错误,但我猜你得到了:

    找不到列:1054 'where 子句'中的未知列 '1'

    这是因为where 方法的第一个参数应该是列名并且会被引用。所以在你的情况下,当你有:

    $query = $baseQuery->where('1', '=', '1')
    

    生成的 SQL 将是:

    WHERE `1` = 1
    

    所以你应该使用whereRaw 来避免任何引用:

    $query = $baseQuery->whereRaw('1 = 1');
    

    【讨论】:

      【解决方案2】:

      不需要WHERE 1 = 1 部分。完全不需要。

      另外,正如下面评论中所指出的,您想使用where,而不是orWhere


      这是您的代码,经过大量清理:

      $query = DB::table('employee')->select('employee_name', 'employee_salary', 'employee_position', 'employee_city', 'employee_extension', "employee_joining_date", 'employee_age', 'employee_id');
      
      $filters = ['EmployeeNameSeach', 'SalarySeach', 'PositionNameSeach', 'CitySeach', 'ExtensionSeach', 'JoiningDataSeach', 'AgeSeach'];
      
      foreach ($filters as $filter) {
          if (empty($$filter)) continue;
      
          $query->where('employee_name', 'LIKE', '%'.$$filter.'%');
      }
      
      $query->orderBy($columns[$column_index_for_ordering], $column_ordering_direction)
            ->skip($start_data_index)
            ->take($per_page_content_number);
      
      $data = $query->get();
      

      上面的代码使用$$filter 作为variable variables 循环过滤器。我不知道这些过滤器来自哪里,但您可能应该将它们放在关联数组中。会让生活更轻松。

      【讨论】:

      • 我相信他不需要使用orWhere,因为它是or 声明。 Question 在查询中包含所有ands。
      • @user3158900 - 无论哪种情况,都不需要WHERE 1 = 1
      • where 条件也应该使用$$filter :)。
      猜你喜欢
      • 1970-01-01
      • 2018-01-03
      • 2018-12-26
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2015-12-14
      相关资源
      最近更新 更多