我一直在尝试找出如何使用嵌套相关子级来加载多对多类别的多态。类别和子类别的产品在数据透视表中的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与同一个模型相关的类别和嵌套子类别。
任何帮助都会很棒!