我正在设计一个Symfony2应用程序,其中一个计算机实体与几个硬件组件,即主板,CPU,磁盘,MemoryModule等等相关联。他们都是在学说中由实体代表的。Symfony2/Doctrine:如何在同一个集合中添加更多相同的实体?
如果在硬件配置中有多个相同的磁盘,我需要做的是将多个磁盘关联到同一台计算机。我想,以避免像磁盘1,磁盘2等多个领域,所以我设置了两个实体之间的多对多关系:
实体计算机:
//...
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Components\Disk", inversedBy="computers")
* @ORM\JoinTable(name="computers_disks")
*/
protected $disks;
实体磁盘:
//...
enter code here
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Computers\Computer", mappedBy="disks")
*/
protected $computers;
例如,我在我的灯具中运行此代码:
$testComputer = new Computer();
$cpu = $this->getReference('CPU-i3-1150');
$disk = $this->getReference('Disk-wd500blue');
//...
$testComputer->setCpu($cpu); // OK
$testComputer->addDisk($disk); // OK
$testComputer->addDisk($disk); // ERROR
我得到的错误是,符合市场预期,完整性约束违规:
[PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-14'
for key 'PRIMARY'
如何克服呢?我想我应该在连接表上添加一个索引,但我不知道这是否可能。
编辑:我也试过 - 只是为了 - 与单向关系,相同的错误。
非常感谢卡洛斯的位置,其实我在另一个问题上听说过一个“乔伊班”。这非常有帮助。 我也想管理它在一个奏鸣曲管理形式,即有一个“添加磁盘”按钮,但我想这不是微不足道的。 如果我为此打开另一个问题,可能会更好吗?你有什么经验吗? – godzillante
首先尝试实现它,如果你没有得到它的工作,打开一个不同的问题 –