【问题标题】:Symfony UniqueEntity relation not throwing Assert, throwing Duplicate Key ErrorSymfony UniqueEntity 关系不抛出断言,抛出重复键错误
【发布时间】:2021-04-23 22:14:30
【问题描述】:

我在 API 平台中有我的 UserProfile 实体,我正在通过 JWT 登录令牌确定所有者。当我在用户已经拥有用户配置文件时创建用户配置文件时,我想抛出这样的错误。但是,当我这样做时,我会收到有关具有重复实体的数据库错误消息。

Stack Overflow 上关于这个问题的每个线程都提到确保每个字段(在我的例子中是用户名和所有者)都有一个 UniqueEntity,我已经这样做了。

#[UniqueEntity('username')]
#[UniqueEntity('owner')]
 /**
 * @ORM\Entity
 */
class UserProfile
{
    /**

不幸的是,我仍然收到相同的消息:

"debugMessage": "执行'INSERT INTO user_profile (id, username, first_name, last_name,birthday, biography, website, owner_id, image_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' with params ["0a90b58d-12ba-4f00-a924-5c5b6073389a", "test", null, null, null, null, null, "501a54a4-5ec3-4fd7-9821-6421605e733f", 2] :\n\nSQLSTATE[23505]:唯一违规:7 错误:重复键值违反唯一约束“uniq_d95ab4057e3c61f9”\n详细信息:键 (owner_id)=(501a54a4-5ec3 -4fd7-9821-6421605e733f) 已经存在。",

    /**
     * @ORM\OneToOne(targetEntity=User::class, inversedBy="userProfile", cascade={"persist", "remove"})
     */
    #[Groups(["userProfile:read"])]
    #[Assert\Valid()]
    private $owner;

【问题讨论】:

    标签: symfony doctrine api-platform.com


    【解决方案1】:

    我的猜测是您需要在刷新之前使用UniqueEntity constraint 来验证您的用户。否则你会在尝试插入时遇到 mysql 错误。

    尝试使用这样的东西:

    /**
     * @ORM\Entity
     * @UniqueEntity(fields={"firstField", "secondField", "..."})
     */
    

    【讨论】:

    • 嗨,我在上面的代码中有 UniqueEntity 约束。你推荐它的不同用法吗?
    • 嗨,首先你在刷新之前验证你的实体吗?
    • 刷新是在 API 平台框架端处理的,这里对用户名的 UniqueEntity 验证有效,所以是的,它在刷新之前被验证。 owner 关系似乎没有得到检查。
    • here 所述,如果您希望用户名和所有者的组合是唯一的,则多个字段必须位于具有一个 UniqueEntity 的数组中。如果您希望这些字段单独唯一,请使用两个 UniqueEntity。你能展示你的整个 UserProfile 类吗?
    • 我确实希望它们分别是唯一的,并且我已经在使用两个 UniqueEntity 属性。
    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    相关资源
    最近更新 更多