2015-09-16 1 views
0

Я пытаюсь построить этот PHP MySQL запрос на Laravel Query Builder:Laravel Query Builder - где (1 = 1) получение ошибки

$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); 

Может ли кто-нибудь мне помочь? Спасибо.

ответ

3

Там нет необходимости 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 к петле через фильтры. Я не знаю, откуда эти фильтры, но вы, вероятно, должны иметь их в ассоциативном массиве. Это облегчит жизнь.

+0

Я считаю, что ему не нужно использовать 'илиWhere', а также инструкцию' или'. Вопрос имеет все 'и' в запросе. – user3158900

+0

@ user3158900 - В любом случае, нет необходимости в 'WHERE 1 = 1'. –

+0

Условие 'where' должно также использовать' $$ filter' :). – Bogdan

5

Вы не отправил ошибку, но я предполагаю, что вы получаете:

Колонка не найден: 1054 Неизвестный столбца «1» в «где предложение»

Это потому что первый параметр метода where, как ожидается, будет именем столбца и будет указан. Так что в вашем случае, если у вас есть:

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

SQL, генерироваться будет:

WHERE `1` = 1 

Таким образом, вы должны использовать whereRaw, чтобы избежать любого процитировать:

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

 Смежные вопросы

  • Нет связанных вопросов^_^