Я управляю огромным приложением, которое использует Doctrine с пакетом LaravelDoctrine и Fluent.
Я уже использовал пару раз наследование Mapping, но я не знаю, как достичь многого ToMany polymorphi c и не смогли найти ничего в документации.
Давайте сделаем это с тегами:
<?php
abstract class Tag
{
/** @var string $name */
protected $name;
/** @var string $color */
protected $color;
public function __construct(string $name, string $color)
{
$this->name = $name;
$this->color = $color;
}
затем:
<?php
class PostTag extends Tag
и:
<?php
class VideoTag extends Tag
То, что я пробовал до сих пор, - это сочетание нормальных отношений belongsToMany
в дочерних сопоставлениях с методом singleTableInheritance
в сопоставлении родителей.
<?php
class TagMapping extends EntityMapping
{
public function map(Fluent $builder)
{
$builder->bigIncrements('id');
$builder->string('name');
$builder->string('color');
$builder->singleTableInheritance()->column('type');
}
<?php
class PostTagMapping extends EntityMapping
{
public function map(Fluent $builder)
{
$builder->belongsToMany(Post::class, 'posts')->inversedBy('tags');
}
<?php
class PostMapping extends EntityMapping
{
public function map(Fluent $builder)
{
$builder->belongsToMany(PostTag::class, 'tags')->mappedBy('posts');
}
и сохраняет теги в таблице тегов, но не взаимосвязь в стержне. Я даже не знаю, должен ли он создавать одну сводную диаграмму для каждого ребенка или нет.
То, что Laravel может предложить, - это такая таблица (сводная таблица):
| tag_id | taggable_type | taggable_id|
Что бы * Fluid библиотека Laravel - Doctrine с методом singleTableInheritance
выглядела бы так (таблица тегов):
|id |type |
| 1 |posttag |
| 2 |videotag |
Я просто не уверен, как полиморфные c отношения должны быть реализованы