我必须将同一字段与不同的参数关联。
多对多:
/** * @ORM\ManyToMany(targetEntity="BRCN\TaxonomyBundle\Entity\Taxonomy", mappedBy="genderCategories") */ private $genders; /** * @ORM\ManyToMany(targetEntity="BRCN\TaxonomyBundle\Entity\Taxonomy", inversedBy="genders") * @ORM\JoinTable(name="menu_relations", * joinColumns={@ORM\JoinColumn(name="gender_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")} * ) */ private $genderCategories;
这些变量在同一表“ id”中使用相同的列名。
当我查看“ menu_relations”表时,我看到与我的参数相关联的两个主键。
当我尝试插入新记录时,出现此错误:
使用参数[94,1]执行’INSERT INTO menu_relations(gender_id,category_id)VALUES(?,?)’时发生异常: SQLSTATE [23000]:违反完整性约束:1062键“ PRIMARY”的条目“ 94-1”重复
使用参数[94,1]执行’INSERT INTO menu_relations(gender_id,category_id)VALUES(?,?)’时发生异常:
SQLSTATE [23000]:违反完整性约束:1062键“ PRIMARY”的条目“ 94-1”重复
插入值:
if($request->isXmlHttpRequest()) { $categories = $request->request->get('category'); foreach($categories as $key => $value) { /** @var $gender \BRCN\TaxonomyBundle\Entity\Taxonomy */ $gender = $em->find('BRCNTaxonomyBundle:Taxonomy', $key); if($gender) { foreach($value as $category) { $category = $em->find('BRCNTaxonomyBundle:Taxonomy', $category); $gender->addGenderCategory($category); $em->persist($gender); } $em->flush(); } } return JsonResponse::create([ 'status' => true, 'message' => '陌li艧kilendirme Ba艧ar谋l谋' ]); }
您可以利用Doctrine的索引关联来避免添加重复的关联。
下面将指数的代码$genderCategories通过category_id,所以它永远不会包含多个类别具有相同的ID。
$genderCategories
category_id
注意注释中的indexBy属性。
indexBy
/** * @ORM\ManyToMany(targetEntity="BRCN\TaxonomyBundle\Entity\Taxonomy", inversedBy="genders", indexBy="id") * @ORM\JoinTable(name="menu_relations", * joinColumns={@ORM\JoinColumn(name="gender_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")} * ) */ private $genderCategories; public addGenderCategory($category) { $this->genderCategories[$category->getId()] = $category; }
边注
我建议将persist呼叫退出循环以提高性能。
persist
foreach($value as $category) { $category = $em->find('BRCNTaxonomyBundle:Taxonomy', $category); $gender->addGenderCategory($category); } $em->persist($gender);