何处和如果声明Laravel雄辩

时间:2014-08-22 08:21:55

标签: php laravel eloquent

我已经为我的网站构建了一个多重过滤器搜索,但我似乎无法找到有关我搜索位置内的多个if语句的任何文档。

返回大量结果

$data = Scrapper::paginate(15);

返回none ..需要它以这种方式使用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();

2 个答案:

答案 0 :(得分:31)

非常相似: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);

答案 1 :(得分:10)

老问题但新逻辑:)

您可以使用Eloquent when()条件方法:

Scrapper::query()
    ->when(Input::has('cat-id'), function ($query) {
        return $query->where('cat_id', Input::get('cat-id'));
    })
    ->when(Input::has('band'), function ($query) use ($hight, $low) {
        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

的更多信息