Doctrine: связь OneToMany с атрибутами - PullRequest
0 голосов
/ 24 апреля 2020

Во-первых, спасибо за ваше время.

Я занимаюсь разработкой веб-сайта с помощью Symfony5 и использую Doctrine2 для создания и управления базой данных. Тем не менее, я боролся с отношением между двумя сущностями.

База данных содержит 2 важные таблицы: Осколок и Колесо.

Эти Колеса используются для рисования мотивов на Осколках, и Колесо можно использовать для рисования на нескольких осколках. Напротив, только одно Колесо используется для каждого Осколка. Это было бы довольно легко с отношением OneToMany / ManyToOne, но дело в том, что это отношение должно содержать атрибут ' равно ' (логическое значение, которое истинно, если мотивы были нарисованы этим точным колесом, или false, если оно действительно близко, но не точное).

Я прошел главу doctrine документации об отношениях, но ничего не нашел в отношениях OneToMany с атрибутами (я видел this но, насколько я понимаю, вы не можете добавить атрибуты).

Через некоторое время я решил сделать это "вручную", создав сущность " ShardWheel ", и поэтому я сделал что-то вроде этого:

Осколочная сущность

/**
 * @ORM\Table(name="shard")
 * @ORM\Entity(repositoryClass="App\Repository\ShardRepository")
 */
class Shard {
 ...
    /**
     * @var ShardWheel|null
     *
     * @ORM\OneToOne(targetEntity="App\Entity\ShardWheel", mappedBy="shard")
     * @ORM\JoinColumn(nullable=true)
     */
    private $shardWheel;
 ...

Осколочная сущность

/**
 * @ORM\Table(name="shard_wheel")
 * @ORM\Entity(repositoryClass="App\Repository\ShardWheelRepository")
 */
class ShardWheel {

    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var bool
     *
     * @ORM\Column(name="equal", type="boolean")
     */
    private $equal;

    /**
     * @var Wheel
     *
     * @ORM\ManyToOne(targetEntity="App\Entity\Wheel", inversedBy="draw")
     * @ORM\JoinColumn(nullable=false)
     */
    private $wheel;

    /**
     * @var Shard
     *
     * @ORM\OneToOne(targetEntity="App\Entity\Shard", inversedBy="shardWheel")
     * @ORM\JoinColumn(nullable=false)
     */
    private $shard;

Колесо сущности

/**
 * @ORM\Table(name="wheel")
 * @ORM\Entity(repositoryClass="App\Repository\WheelRepository")
 */
class Wheel {
 ...
    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="App\Entity\ShardWheel", mappedBy="wheel")
     * // This just serve as an indicator, the constructor initializes the ArrayCollection
     * @ORM\JoinColumn(nullable=true)
     */
    private $draw;
 ...

Дело в том, что оно, похоже, не работает. Я знаю, что это не обычное дело, поэтому вопросов и ответов не так много. Я перепробовал много комбинаций, и я заблудился. Я могу быть глупым. Любые предложения?

PS: Извините, если я сделал какие-либо орфографические ошибки и / или странные предложения, это довольно поздно, и я действительно устал.

Редактировать: я сделал очень быстрый MCD из того, что я хочу: MCD

...