如何避免SQL Api-平台(Symfony)中重复条目的异常?
How to avoid SQL Exception of duplicated entry in Api-platform (Symfony)?
我正在使用 Symfony 5.3 + Api-platform 并且我有一个 User
实体,它有 3 个唯一索引验证器。
它们被标记为@UniqueEntity。
...
* @UniqueEntity({"email", "anonymousGuid", "qrcode" })
*/
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
这些属性也被标记为 unique=true。即:
/**
* @ORM\Column(type="string", length=180, unique=true, nullable=true)
* @Groups ({"user_read","user_write"})
* @Assert\Email
*/
private $email;
但是,当尝试使用 api 插入新用户时,它会抛出 SQL 异常,而不是以正确的 API 格式显示异常。
{
"@context": "/contexts/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'string' for key 'UNIQ_8D93D649A4FF23EC'",
我是不是漏掉了什么?
我真的需要添加一个 manual validation 吗?
在此处阅读 UniqueEntity
的文档:
https://symfony.com/doc/current/reference/constraints/UniqueEntity.html#fields
看起来默认选项是单个字段名称的字符串。要传递字段数组,我 认为 您需要指定选项键:
// DON'T forget the following use statement!!!
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @UniqueEntity(fields={"email", "anonymousGuid", "qrcode"})
*/
注意:
上述用法要求这些字段中的值组合是唯一的,如果其他字段之一不同,则允许再次使用电子邮件。如果您希望每个用户的每个字段都是唯一的(唯一列),那么您应该有三个单独的 UniqueEntity
条目,每个条目都有一个字段:
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @UniqueEntity("email")
* @UniqueEntity("anonymousGuid")
* @UniqueEntity("qrcode")
*/
我正在使用 Symfony 5.3 + Api-platform 并且我有一个 User
实体,它有 3 个唯一索引验证器。
它们被标记为@UniqueEntity。
...
* @UniqueEntity({"email", "anonymousGuid", "qrcode" })
*/
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
这些属性也被标记为 unique=true。即:
/**
* @ORM\Column(type="string", length=180, unique=true, nullable=true)
* @Groups ({"user_read","user_write"})
* @Assert\Email
*/
private $email;
但是,当尝试使用 api 插入新用户时,它会抛出 SQL 异常,而不是以正确的 API 格式显示异常。
{
"@context": "/contexts/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'string' for key 'UNIQ_8D93D649A4FF23EC'",
我是不是漏掉了什么?
我真的需要添加一个 manual validation 吗?
在此处阅读 UniqueEntity
的文档:
https://symfony.com/doc/current/reference/constraints/UniqueEntity.html#fields
看起来默认选项是单个字段名称的字符串。要传递字段数组,我 认为 您需要指定选项键:
// DON'T forget the following use statement!!!
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @UniqueEntity(fields={"email", "anonymousGuid", "qrcode"})
*/
注意:
上述用法要求这些字段中的值组合是唯一的,如果其他字段之一不同,则允许再次使用电子邮件。如果您希望每个用户的每个字段都是唯一的(唯一列),那么您应该有三个单独的 UniqueEntity
条目,每个条目都有一个字段:
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @UniqueEntity("email")
* @UniqueEntity("anonymousGuid")
* @UniqueEntity("qrcode")
*/