Я пытался выяснить, как получить полиморфные категории «многие ко многим» с вложенным связанным потомком для загрузки. Например. продукты с категориями и дочерними категориями, для которых в сводной таблице указан тот же идентификатор категории в таблице, что и идентификатор продукта.
Это то, что я имею до сих пор, работает соотношение категорий, как и дети, только когда я пытаюсь сделать это с продуктом, которого нет:
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();
Я также пробовал много разных где. Я хочу иметь возможность иметь это как область или что-то подобное, поэтому очень легко получить категории и вложенные дочерние категории, которые относятся к той же модели, что и идентификатор родительской категории.
Любая помощь будет потрясающей!