Symfony2 UniqueEntity验证约束作为级联?
在我的Tag
实体中,我需要避免在给定用户创建的所有标记中创建具有相同name
标记。 与User
实体(指定user
多对一关系。
我在数据库(使用uniqueConstraints
)和UniqueEntity
进行表单验证时强制执行此约束。 但是我无法理解Symfony2文档中关于这个约束的这句话:
这个必需的选项是这个实体应该是唯一的字段(或字段列表 )。 例如,您可以指定上面用户示例中的电子邮件和名称字段应该是唯一的。
但我需要这个name
和user
是唯一的整体 。 这是可能的和如何? 下面是一个不工作的例子:名字和用户都被检查为唯一字段。
/**
* @ORMEntity(repositoryClass="AcmeHelloBundleRepositoryTagRepository")
* @ORMTable(
* name="tag",
* uniqueConstraints={
* @ORMUniqueConstraint(columns={"name", "user_id"}),
* })
* @UniqueEntity(fields={"name", "user"})
*/
class Tag implements TenantableEntityInterface
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMColumn(type="string", length=31)
* @AssertNotBlank
* @AssertMaxLength(limit="31")
*/
private $name;
/**
* @ORMManyToOne(targetEntity="User", inversedBy="tags")
* @ORMJoinColumn(nullable=false)
*/
private $user;
}
编辑 :与上面的形式验证的定义,但我得到:
SQLSTATE [23000]:完整性约束违规:1062键'UNIQ_389B7835E237E06A76ED395'的重复条目'名称-1'。
使用相同的name
和相同的用户创建两个标签。
如果您希望name
和user
的组合都是唯一的,请使用:
@UniqueEntity(fields={"name", "user"})
如果你想让它们分别独一无二,请使用以下命令:
@UniqueEntity(fields="name")
@UniqueEntity(fields="user")
这同样适用于表格上的唯一约束。
请注意:
对于yaml使用:
constraints:
- SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity:
fields: username
groups: [SomeYourGroup]
或者注释:使用Symfony Bridge Doctrine Validator Constraints UniqueEntity;
在文档http://symfony.com/doc/current/reference/constraints/UniqueEntity.html
团体不可用!!!
链接地址: http://www.djcxy.com/p/57877.html上一篇: Symfony2 UniqueEntity validation constraint as concatenation?