Во-первых, спасибо за ваше время.
Я занимаюсь разработкой веб-сайта с помощью 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