我正在使用 Symfony 5.3 Api 平臺,并且我有一個User物體,它具有 3 個唯一索引驗證器。
它們被標記為@UniqueEntity。
...
* @UniqueEntity({"email", "anonymousGuid", "qrcode" })
*/
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
這些屬性也被標記為 unique=true。IE:
/**
* @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'",
我錯過了什么嗎?
我真的需要添加手動驗證嗎?
uj5u.com熱心網友回復:
閱讀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")
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/331939.html
標籤:接口 symfony api-platform.com symfony5
下一篇:Api平臺批量操作
