使用多个过滤器和分页简化雄辩的laravel?

dxxyhpgq  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(395)

我的问题是如何简化使用laravel分页的多个有说服力的查询。
我正在建立一个拉维网站,在这个网站上人们可以分享某些食谱。
我有多个变量,成员可以搜索、筛选和查找。所以会员可以发布菜谱并添加:-类型-持续时间-国家/地区-平台
其思想是有一个包含所有配方的页面,但也有一些页面只应用了1、2或更多过滤器的配方。e、 冷的5分钟食谱或德国温暖的长食谱。
我使用laravel5.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\u id','=',1)等是可选的。
当我尝试对每个对象进行筛选时,首先是平台,然后是类型等等,我无法应用分页。
有什么方法可以简化这一点吗?我可以使用ajax过滤器和laravel分页吗?

z9zf31ra

z9zf31ra1#

通过执行以下操作使它们成为可选的:

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;
}

相关问题