首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony原理多对多完整性约束违反: 1062重复条目

Symfony原理多对多完整性约束违反: 1062重复条目
EN

Stack Overflow用户
提问于 2018-01-24 04:26:18
回答 1查看 1.3K关注 0票数 2

我有一个具有manyToMany (‘自引用’)关系的实体用户。

代码语言:javascript
复制
/**
     * @Serializer\Expose()
     * @ORM\ManyToMany(targetEntity="User")
     * @ORM\JoinTable(name="user_referent",
     *  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *  inverseJoinColumns={@ORM\JoinColumn(name="coach_id", referencedColumnName="id")}
     * )
     * @ORM\JoinColumn(nullable=true)
     * @Assert\Valid
     *
     */
    private $coaches;

在我的测试期间,当我尝试创建一个重复条目时,我有来自sql (SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry.)的正确消息,但我希望在刷新之前捕获重复项。因此,我在add函数中添加了一条if语句。

代码语言:javascript
复制
public function addCoach(User $coach)
    {
        if ($this->coaches->contains($coach)) {
            return;
        }
        $this->coaches[] = $coach;

    }

但在使用表单时,似乎不会调用addCoach函数。当我转储它时,不会转储任何值。我尝试了@Table上的@Assert\Valid@Unique或约束...但是什么都不起作用。有没有办法像在实体的任何其他项上一样,设置多对多关系抛出消息的约束?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 06:34:12

只有当您显式调用addCoach方法以在持久化用户实体之前在用户实体上添加coach时,才会调用该方法。它不会被隐式调用。

您可以在User entity中使用onPrePersist方法,这将是一种隐式的方式,每次您尝试将实体刷新到DB中时都会检查重复项。

用以下代码更新你的用户实体的规则orm文件。

代码语言:javascript
复制
<lifecycle-callbacks>
   <lifecycle-callback type="prePersist" method="prePersist" />
</lifecycle-callbacks>

然后使用以下内容更新用户实体文件。

代码语言:javascript
复制
    /**
     * @PrePersist
     */
    public function onPrePersist()
    {
        // remove duplicates from coaches array.

        $coachKeys[] = array();
        foreach($this->coaches as $key => $coach) {
            if(!in_array($coach->getUserId(), $coachKeys) {
                $coachKeys[] = $key;
            } else {
               $this->removeCoach($this->coach); // unset($this->coache[$key]);
            }     
        }           
    }

这将确保在刷新之前删除重复条目。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48410217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档