php - 使用多个过滤器和分页来简化 Eloquent Laravel?

标签 php mysql laravel object eloquent

我的问题是关于简化与 Laravel 分页配合使用的多个 Eloquent 查询。

我正在建立一个 Laravel 网站,在这个网站上人们可以分享某些食谱。

我有多个变量可供成员搜索、过滤和查看。 因此成员可以发布食谱并添加: - 类型 - 期间 - 国家 - 平台

这个想法是,有一个页面包含所有食谱,但也有一些页面仅应用 1、2 个或更多过滤器的食谱。例如。冷 5 分钟食谱或德国暖长食谱。

我正在使用 Laravel 5.7,现在我正在使用不同的 where 语句构建各种查询。像这样:

 public static function getRecipesMixFilter($cid, $pid, $tid, $did)
{
    $recipes = self::with(['member', 'platform', 'member.platform', 'member.duration', 'member.type'])->whereActive(1)->whereHas('member', function ($query) use ($cid, $pid, $tid, $did) {
            $query->where('country_id', '=', $cid)
            ->where('platform_id', '=', $pid)
            ->where('type_id', '=', $tid)
            ->where('duration_id', '=', $did);
    })->orderBy('updated_at', 'desc')->paginate(24);

    return $recipes;
}

但是做到这一点的简单方法是什么?现在我有 15 个不同的查询,我觉得可能是 1。因此 ->where('platform_id', '=', 1) 等是可选的。

当我尝试过滤每个对象(例如第一个平台,然后是类型等)时,我无法应用分页。

有没有办法简化这个过程?我可以将 Ajax 过滤器与 Laravel 分页一起使用吗?

最佳答案

您可以通过这样做使它们成为可选:

public static function getRecipesMixFilter($cid = null, $pid = null, $tid = null, $did = null)
{
    $recipes = self::with(['member', 'platform', 'member.platform', 'member.duration', 'member.type'])
        ->whereActive(1)
        ->whereHas('member', function ($query) use ($cid, $pid, $tid, $did) {
            if ($cid) {
                $query->where('country_id', '=', $cid)
            }
            if ($pid) {
                $query->where('platform_id', '=', $pid)
            }
            if ($tid) {
                $query->where('type_id', '=', $tid)
            }
            if ($did) {
                $query->where('duration_id', '=', $did)
            }
        })->orderBy('updated_at', 'desc')->paginate(24);

    return $recipes;
}

关于php - 使用多个过滤器和分页来简化 Eloquent Laravel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53823831/

相关文章:

php - 在 oneToMany 关系中创建和删除子项的正确 DDD 方法?

mysql - 在 Django 1.7.8 中添加空白=True CharField 时迁移 SQL 无效

mysql - 更新不更新整个字符串

php - 多个动态查询范围

php - 我在哪里可以获得 Laravel 事件的完整列表(由核心库触发)?

php - 将我的 knockoutjs 模型与我的后端 (PHP) 同步

php - 将 Sphinx 与 PHP 和 MySQL 一起使用的指南

php - 如何获取提交后检查的表格单元格中的数据

mysql - 使用多条件 Laravel 连接表

laravel - Auth::user()->name 在 laravel 的包 View 中不起作用?