我正在做一个Laravel项目,其中我有一个层次化的类别 struct .我的数据库中的每个集合都与一个类别相关联,并且该类别可以有父类别和子类别.我正在try 实现一个筛选器功能,该功能允许我基于选定的类别及其所有子类别检索集合.

例如,如果我 Select "Music"类别,我希望检索"Music"类别中的所有集合,以及其子类别中的集合,如"Rock"、"Hip-Hop"和"Rap".

我试图在我的Eloquent 模型中实现作用域方法来实现这一点,但我遇到了递归和类别之间的关系方面的问题.

以下是我当前的代码:

 public function scopeOfCategory($query, $category){
    if ($category) {
        return $query->where(function ($query) use ($category) {
            $query
                ->where('category_id', $category)
                ->orWhereHas('category.parent', function ($query) use ($category) {
                    $query->ofCategory($category);
                });
        });
    }
    return $query;
}

错误:

local.ERROR: Call to undefined method Illuminate\Database\Eloquent\Builder::ofCategory()

推荐答案

它是这样工作的,但我认为这不是一个好方法,无论如何它是有效的:)

public function getChildreenIdByCategory($category_id)
{
    $childreen_ids = [$category_id];
    $childreen = categories::where('parent_id', $category_id)->get();
    foreach ($childreen as $child) {
        $childreen_ids[] = $child->id;
        $childreen_ids = array_merge(
            $childreen_ids,
            $this->getChildreenIdByCategory($child->id)
        );
    }
    return $childreen_ids;
}
public function scopeOfCategory($query, $category)
{
    if ($category) {
        $ids = $this->getChildreenIdByCategory($category);
        return $query->whereIn('category_id', $ids);
    }
}

Php相关问答推荐

如何在搜索域名时重定向到登陆页?

PHP DOMDocument忽略第一个表S结束标记

从含有特殊字符的ANSI文本文件中读取数据是在移值,为什么?

如何在函数中定位WooCommerce产品循环

PHP -多维数组到一维数组

如何在Livewire 3 Form类中做依赖注入?

Regex:高级删除单行PHP注释

单个产品页面 WooCommerce 订阅价格字符串的更改

计算添加到购物车的点击次数并将其显示在 WooCommerce 管理产品列表中

如何在 PHP 中对具有相同数组值的值求和

Symfony:指定 data_class 时,提交的表单获取初始化前不得访问

htaccess Rewriterule 无法以任何方式工作

WooCommerce单个产品页面上启用额外选项卡的产品元框字段

Laravel Factory - 在单列中生成具有随机迭代量的假 json 数组数据

Symfony 自定义注销

hasOne/belongsToMany 或多对多

如何通过路由传递变量

如何将在同一台服务器上运行的 2 个 PHP 应用程序与使用公共会话分开

将参数传递给 laravel 9 工厂

多排序子数组 - 包含范围数据的子数组