2014-08-22 4 views
7

Я создал поиск по нескольким фильтрам для своего сайта, но я не могу найти какую-либо документацию по нескольким операторам внутри внутри, где для моего поиска.Где и если заявления Laravel Eloquent

Возвращает Много результатов

$data = Scrapper::paginate(15); 

Возвращает ни один .. это нужно быть таким образом, чтобы иметь где заявления с IF см ниже.

$database = new Scrapper; 
$database->get(); 

Пример того, что я хочу сделать ..

$database = new Scrapper; 
    if (isset($_GET['cat-id'])) { 
     $database->where('cat_id', '=', $_GET['cat-id']); 
    } 
    if (isset($_GET['band'])) { 
     $database->where('price', 'BETWEEN', $high, 'AND', $low); 
    } 
    if (isset($_GET['search'])) { 
     $database->where('title', 'LIKE', '%'.$search.'%'); 
    } 
    $database->get(); 

ответ

24

Очень похоже на это: Method Chaining based on condition

Вы не хранить каждый цепочки запросов.

$query = Scrapper::query(); 

if (Input::has('cat-id')) { 
    $query = $query->where('cat_id', '=', Input::get('cat-id')); 
} 
if (Input::has('band')) { 
    $query = $query->whereBetween('price', [$high, $low]); 
} 
if (Input::has('search')) { 
    $query = $query->where('title', 'LIKE', '%' . Input::get($search) .'%'); 
} 

// Get the results 
// After this call, it is now an Eloquent model 
$scrapper = $query->get(); 

var_dump($scrapper); 
2

Старый вопрос, но новая логика :)

Вы можете использовать красноречивый когда() условный метод:

Scrapper::query() 
    ->when(Input::has('cat-id'), function ($query) { 
     return $query->where('cat_id', Input::get('cat-id')); 
    }) 
    ->when(Input::has('band'), function ($query) { 
     return $query->whereBetween('price', [$high, $low]); 
    }) 
    ->when(Input::has('search'), function ($query) { 
     return $query->where('title', 'LIKE', '%' . Input::get('search') .'%'); 
    }) 
    ->get(); 

Более подробная информация на https://laravel.com/docs/5.5/queries#conditional-clauses

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