Symfony Doctrine UniqueEntity

时间:2016-01-13 10:41:21

标签: php symfony doctrine-orm

我有UniqueEntity字段电子邮件,我使用SoftDeleteable

        filters:
        softdeleteable:
            class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
            enabled: true


 * @Gedmo\SoftDeleteable(fieldName="deletedAt")
 * @UniqueEntity(
 *     fields="email",
 *     errorPath="not valid",
 *     message="This email is already in use."
 * )

当我在我的数据库中时,我的用户已经删除某个日期并通过电子邮件找到实体

$user_by_email = $em->getRepository('ArtelProfileBundle:Users')->findOneByEmail($email);

我有空,这没关系。但是当我创建新用户时,我有错误

Integrity constraint violation: 1062 Duplicate entry 'wwwwwdww@1111.com' for key 'UNIQ_1483A5E9E7927C74'",
这是我的行动。但是在刷新时有错误,当验证没有错误时。帮助

        $data = $request->request->all();
        $data = $this->get('serializer')->serialize($data, 'json');
        $user = $this->get('serializer')->deserialize($data, 'Artel\ProfileBundle\Entity\Users', 'json');

        if (count($errors = $this->get('validator')->validate($user)) > 0) {
            $view = $this->view((string) $errors, 400);

            return $this->handleView($view);
        }

        $em->persist($user);
        $em->flush();

1 个答案:

答案 0 :(得分:1)

嗯,您对email有一个独特的约束,并且您尝试使用现有的电子邮件插入新用户..因此错误非常有意义。

SoftDeleteable 只是在您的数据库中添加了一个标志,但不会更改管理唯一字段的方式。

但是,您可以做的是使emaildeleted_at对唯一,而不仅仅是email字段。只有在电子邮件不相同的行中,您才会收到此错误。

或者,或者,例如,在“软删除”用户时删除电子邮件。但我不推荐它。