2015-10-12 2 views
0

Я работаю над проектом Laravel 5.1. Я делаю фильтр, чтобы отображать результаты проекта.Laravel 5.1 Запрос фильтра

Существует входной фильтр Seach по имени И выберите для статуса проекта

Запрос осуществляется с помощью AjaxRequest к способу фильтра в контроллере. В этом методе фильтра я получить массив с параметрами фильтра

Array 
(
    [filterName] => projectNameHere... 
) 

Это когда пользователь только фильтрует ее по имени проекта

И это массив, когда поиск пользователей по Projectname и статус

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 выберите запрос ::

$projects = DB::select('select * from project where name = ? AND project_status = ?', ['projectName', 'projectStats']); 

Это сырье работает запрос, но как я мог бы сделать его динамичным

ответ

0

С Laravel вы можете избегайте писать слишком много sql. Сначала некоторые предположения.

  1. У вас есть модель под названием «Проект» для таблицы проектов
  2. массив извлекается из входного отправленного клиентом.

Пример:

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 будет построена на основе значений, присутствующих

+0

При использовании \t // создать новый конструктор запросов (истинный, чтобы игнорировать удаленные) $ запроса = Project :: NewQuery (истина); \t Я получаю следующую ошибку: Нестатический метод 'newQuery' не следует называть статически меньше ... Метод динамического класса, называемый статическим. – Bham

+0

@Bham извините мою ошибку, я считаю, что теперь должно быть правильно в соответствии с [здесь] (http://laravel.com/api/5.1/Illuminate/Database/Eloquent/Model.html#method_query) – AbstractChaos

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