当前位置: 首页 > 面试题库 >

关于同一实体重复输入错误的学说ManyToMany

王长卿
2023-03-14
问题内容

我必须将同一字段与不同的参数关联。

多对多:

/**
 * @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”重复

插入值:

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。

注意注释中的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呼叫退出循环以提高性能

foreach($value as $category) {
    $category = $em->find('BRCNTaxonomyBundle:Taxonomy', $category);
    $gender->addGenderCategory($category);
}

$em->persist($gender);


 类似资料:
  • 问题内容: 我正在使用PHP。 请问什么是将新记录插入具有唯一字段的数据库的正确方法。我正在批量插入很多记录,我只想插入新记录,并且我不想重复条目有任何错误。 有没有唯一方法可以首先进行SELECT并查看条目是否在INSERT之前已经存在-并且仅在SELECT不返回任何记录时才插入INSERT?我希望不是。 我想以某种方式告诉MySQL忽略这些插入而没有任何错误。 谢谢 问题答案: 如果在重复记录

  • 问题内容: 尽管发布了其他所有文章,但在MacOSX和NetBeans 7.2上,我找不到GlassFish的此错误的解决方案。 这里的代码: Sale.java 客户.java 产品.java 问题答案: 消息很清楚:映射中有重复的列。这意味着您两次映射了相同的数据库列。实际上,您有: 并且: (/也一样)。 您不应通过其他实体的ID来引用它们,而应直接引用该实体。删除该字段,它是无用的。并针对

  • 我是Java新手,最近我学习类和对象主题。但是,我无法继续执行此代码: 在主要方法上,我得到了学生的错误,但没有得到老师的错误。我不知道我是否犯了什么错误,或者我看不见。必须做什么? 我得到的错误是: 未使用局部变量学生的值 没有类研究类型的封闭实例是可访问的。必须用类研究类型的封闭实例来限定分配(例如x.newA(),其中x是类研究的实例)。 换行断点:ClassResearch[line: 4

  • 我正在用android Studio开发扫描android应用程序的蓝牙设备。有一个输入字段,当输入名称与扫描名称匹配时,我想将数据发送到firebase。下面我已经提到了我在做什么 } 当我运行应用程序时,应用程序已停止,出现如下错误 我能做些什么来避免NumberFormatException

  • 我通过从html表单发送值来测试我的数据库。独特的插入是好的,连接是好的。我的问题是,当我故意发送一个重复的(用户名)时--再次出于测试目的,我会得到一条错误消息。太完美了! null 明确地说,我的目标是将密钥'username'发送回客户机表单,以表明他的用户名已被使用。我将不得不做同样的电子邮件稍后也,因此我想要钥匙。 编辑:我认为我必须使用带有GET诊断的存储过程。与本文类似。