gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:56:03 26 4
gpt4 key购买 nike

我的问题是关于简化与 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com