php - Laravel/Eloquent 中按多个条件过滤模型

标签 php laravel eloquent

我想过滤产品列表。该API可以在路由/q中访问,我传递像这样的过滤参数/q?location=1,2&category=1,2,3(如果没有传递参数,它将获取所有位置/类别。

public function getProductsByQuery()
{
    $commaSeparatedLocations = Input::get('location');
    $commaSeparatedCategories = Input::get('category');


    if ($commaSeparatedLocations == null){
        $numberOfLocations = Location::count();
        for ($i=0;$i<=$numberOfLocations;$i++)
        {
            $locationsArray[$i] = $i;
        }
    } else {
        $locationsArray = $this->toArray($commaSeparatedLocations);
    }

    if ($commaSeparatedCategories == null){
        $numberOfCategories = Category::count();
        for ($i=0;$i<=$numberOfCategories;$i++)
        {
            $categoriesArray[$i] = $i;
        }
    } else {
        $categoriesArray = $this->toArray($commaSeparatedCategories);
    }

    return $products = Product::whereIn('category_id', $categoriesArray)->whereIn('location_id', $locationsArray)->paginate(config('app.products_per_page'));
}

public function toArray($commaSeparatedString)
{
    return explode(",",$commaSeparatedString);
}

好吧,它确实有效。但我想知道如何改进我的代码。必须有一种更智能的方法,不需要那么多 SQL 查询。

最佳答案

这对我来说看起来更具可读性:

public function getProductsByQuery()
{
    $q = Product::query();

    if (request('location')) {
        $q->whereIn('location_id', $this->toArray(request('location')));
    }

    if (request('category')) {
        $q->whereIn('category_id', $this->toArray(request('category')));
    }

    return $q->paginate(config('app.products_per_page'));
}

关于php - Laravel/Eloquent 中按多个条件过滤模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652344/

相关文章:

php - Salesforce Apex 的数组表示法

javascript - JS/jQuery 在同一页面中将数组/变量/数据传递给 PHP?

使用 Redis pub sub 和 socket io 的 Laravel 广播需要超过 2 秒才能传送

php - 当我使用 Laravel 将文件上传到 MySQL 时,每个请求的数据库表中有两行分隔的行

php - Laravel Eloquent 排序查询

javascript - Bootstrap 可忽略的成功消息使用 ajax 时不会显示更长的时间

php - 如何使用 PHP 获取 CSV 文件中的总行数?

Laravel 5 命名空间

php - Laravel 关系(与)

mysql - Laravel SUBSTRING 关于 Eloquent 查询