ManyToMany polymorphi c relathionship с использованием пакета Laravel Doctrine и Fluent - PullRequest
0 голосов
/ 21 февраля 2020

Я управляю огромным приложением, которое использует 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 отношения должны быть реализованы

...