在数据库级别,如下所示,使用一个以上的选项定义UNIQUENESS并没有区别。尽管@UniqueConstraint在其文档中读到“它仅在SchemaTool模式生成上下文中具有含义”,但两者之间是否存在ORM级别差异?我的意思是,当我们运行查询时,事情的处理方式是否有所不同?


@UniqueConstraint
@Column(唯一= true)


示例-@UniqueConstraint



/**
 * @ORM\Entity
 * @ORM\Table(
 *      name="user",
 *      uniqueConstraints={
 *          @ORM\UniqueConstraint(columns={"email"})
 *      }
 * )
 */
class User
{
    /**
     * @ORM\Column(name="email", type="string", length=100)
     */
    private $email;
}


DQL

CREATE TABLE `user` (
  `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  UNIQUE KEY `UNIQ_8D93D649E7927C74` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


示例-@Column-unique = true



/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User
{
    /**
     * @ORM\Column(name="email", type="string", length=100, unique=true)
     */
    private $email;
}


DQL

CREATE TABLE `user` (
  `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  UNIQUE KEY `UNIQ_8D93D649E7927C74` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

最佳答案

基本上没有区别。两者都在列上创建唯一键。

但是@UniqueConstraint有更多的可能性。使用@UniqueConstraint,可以为键指定名称或跨多列。缺点是要键入的内容要多得多(不那么糟糕),列名必须是数据库中的列名,而不是php属性名。

unique=true上的@Column是在单列上创建唯一键的最简单方法。

在运行查询时,没有区别。 ORM不在乎唯一的定义。尤其是在插入时,您会从数据库中遇到关于唯一性冲突的崩溃,而不是从ORM中崩溃。您必须自己确保唯一性,例如使用Symfony中的唯一实体验证。

07-28 02:11