php - 带有 ManyToOne 字段的 Doctrine @UniqueEntity?

标签 php symfony doctrine doctrine-orm many-to-one

我正在尝试创建一个包含 2 个字段(都是 ManyToOne 字段)的 UniqueEntity。

代码如下:

/*
* @ORM\Table()
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity(fields={"user", "connect"})
*/
class UserConnect
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var boolean $isLeader
     *
     * @ORM\Column(name="isLeader", type="boolean")
     */
    private $isLeader;

    /**
     * @var date $joinedDate
     *
     * @ORM\Column(name="joinedDate", type="date")
     */
    private $joinedDate;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="userConnects")
     * 
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="Connect", inversedBy="userConnects")
     * 
     */
     private $connect;

目标是确保我只有一个实体将 USER 与 CONNECT 联系起来。

我是否应该在我的 @UniqueEntity 声明中写一些别的东西?

最佳答案

我知道您希望仅当一条记录的 userconnect 字段在数据库中的另一条记录中重复时出现错误。

@UniqueEntity 注释已针对您的目的(多列索引)正确声明,但只会在表单验证中触发,不会影响 DDBB 模式。

如果您想在数据库级别添加相同的检查,您应该在 Table() 声明中使用 @UniqueConstraint 注释并为新索引命名。像这样的东西:

/*
* @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(name="IDX_USER_CONNECT", columns={"user_id", "connect_id"})})
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity(fields={"user", "connect"})
*/
class UserConnect
{

另一方面,如果您在每个属性中声明 @ORM\Column(unique=true),您将获得非常不同的行为,它不会一个多列索引,但您将有两个独立的唯一列,如果您输入两次相同的 user_id,您将收到一个独立于 connect_id 值的错误,如果您输入两次相同的 connect_id 值,也会发生同样的情况。

关于php - 带有 ManyToOne 字段的 Doctrine @UniqueEntity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10983828/

相关文章:

php - 自定义约束验证器不存在,或无法自动加载

php - Symfony 无法连接到 MySQL Docker 容器

php - 写你自己的媒体库 : where to start?

mysql - 当 null 时,如何让带有 where not 子句的 Doctrine 查询生成器返回值

php - 使用 Symfony 和 Doctrine 更新最后一个数据库条目

PHP - 移动到 AWS S3 后删除本地文件 - 文本文件忙错误

php - Laravel 基本路径

PHP Laravel save() 不更新记录

php - 只有最后一个数组元素被正确写入

mysql - Symfony2 重复条目 - 但为什么呢?