【发布时间】:2015-11-02 08:18:27
【问题描述】:
我正在设计一个 Symfony2 应用程序,其中计算机实体与多个硬件组件相关联,即主板、CPU、磁盘、内存模块等。它们都由 Doctrine 中的实体表示。
我需要做的是将多个磁盘与同一台计算机关联,以防它的硬件配置中有多个相同的磁盘。我想避免Disk1、Disk2等多个字段,所以我在两个实体之间设置了ManyToMany关系:
实体计算机:
//...
/**
* @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;
例如,我在我的 Fixtures 中运行此代码:
$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'
我该如何克服这个问题?我想我应该以某种方式在连接表上添加一个索引,但我不知道这是否可能。
编辑:我也尝试过——只是为了——单向关系,同样的错误。
【问题讨论】:
标签: php entity-framework symfony doctrine-orm