Symfony的学说UniqueEntity
问题描述:
我UniqueEntity领域的电子邮件和我用SoftDeleteableSymfony的学说UniqueEntity
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."
*)
,当在我的数据库我有用户与deletedAt一些日期和电子邮件中找到实体
$user_by_email = $em->getRepository('ArtelProfileBundle:Users')->findOneByEmail($email);
我有空,还行吧。但是当我创建新用户时我有错误
Integrity constraint violation: 1062 Duplicate entry '[email protected]' 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();
答
好了,你有email
唯一约束,并尝试添加一个新用户与已经存在的电子邮件..这样的错误是非常合情合理的。
SoftDeleteable只是在数据库中添加一个标志,但不会更改唯一字段的管理方式。
但是,您可以做的是使email
和deleted_at
为唯一,而不仅仅是email
字段。只有当电子邮件地址相同的未删除行时,才会出现此错误。
或者,例如,当您“软删除”用户时,可以删除电子邮件。但我不推荐它。 “
”你可以做的事情是让电子邮件和deleted_at是唯一的,而不仅仅是电子邮件字段。只有在电子邮件没有被删除的行时,你才会得到这个错误。“用这种方法的事情是,只要第二项被删除,这也会导致错误。 – xabbuh
我想说,如果有人试图用已经存在于数据库中但已被软删除的电子邮件“注册”或“创建账户”,由OP确定,那么账户将被“取消删除”而不是比创建一个新的。但理论上,你是对的@xabbuh – tchap
是的,我只是想澄清一点,因为你可能很容易忘记这种情况。 – xabbuh