Ben*_*der 5 orm doctrine symfony doctrine-orm
在数据库级别,使用一个选项而不是另一个选项来定义UNIQUENESS没有区别,如下所示.虽然@UniqueConstraint
在其文档中读到" 它只在SchemaTool模式生成上下文中有意义 ",但它们之间是否存在ORM级别差异?我的意思是当我们运行查询时,处理的事情会有所不同吗
示例 - @UniqueConstraint
类
/**
* @ORM\Entity
* @ORM\Table(
* name="user",
* uniqueConstraints={
* @ORM\UniqueConstraint(columns={"email"})
* }
* )
*/
class User
{
/**
* @ORM\Column(name="email", type="string", length=100)
*/
private $email;
}
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
示例 - @Column - unique = true
类
/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User
{
/**
* @ORM\Column(name="email", type="string", length=100, unique=true)
*/
private $email;
}
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
基本上没有区别.两者都在列上创建唯一键.
但是@UniqueConstraint
有更多的可能性.有了@UniqueConstraint
你可以给该键的名称或跨越多个列.缺点是输入更多(不是更糟),列名必须是数据库中的列名,而不是php属性名.
unique=true
on @Column
是在单个列上创建唯一键的最简单方法.
在运行查询时,没有区别.ORM不关心唯一的定义.特别是在插入时,您会从数据库中获取有关唯一性违规的崩溃,而不是来自ORM.您必须自己确保唯一性,例如在Symfony中使用唯一的实体验证.
归档时间: |
|
查看次数: |
1518 次 |
最近记录: |