多态多对多类别,带有嵌套的相关子类别

时间:2019-04-10 10:35:25

标签: php mysql laravel eloquent

我一直在尝试找出如何使用嵌套相关子级来加载多对多类别的多态。类别和子类别的产品在数据透视表中的categorizable_id与产品ID相同。

到目前为止,这是我所拥有的,只有当我尝试在不符合以下条件的产品上进行分类时,类别关系才能找到子类别:

class Product extends Model
{
    public function categories(): MorphToMany
    {
        return $this->morphToMany(Category::class, 'categorizable')->withTimestamps();
    }
}

类别模型:

class Category extends Model
{
    public function products(): MorphToMany
    {
        return $this->morphedByMany(Product::class, 'categorizable');
    }

    public function children(): HasMany
    {
        return $this->hasMany(Category::class, 'parent_id', 'id');
    }
}

迁移:

Schema::create('categories', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('type');
    $table->string('context');
    $table->integer('parent_id')->nullable();
    $table->timestamps();
    $table->softDeletes();
});

Schema::create('categorizables', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('category_id')->unsigned();
    $table->morphs('categorizable');
    $table->timestamps();
});

我正在尝试各种方法,但无法弄清楚,例如:

$product->categories()->with(['children' => function($q) use ($product) {
    return $q->where(categorizable_id, $product->id);
}])->get();

$product->categories()->with(['children' => function($q) use ($product) {
    return $q->wherePivot('categorizable.categorizable_id', $product->id);
}])->get();

我还尝试了许多不同的地方。我希望能够将其作为作用域或类似对象,因此很容易获得与父类别ID与同一个模型相关的类别和嵌套子类别。

任何帮助都会很棒!

0 个答案:

没有答案