Symfony2 UniqueEntity验证约束作为级联?

在我的Tag实体中,我需要避免在给定用户创建的所有标记中创建具有相同name标记。 与User实体(指定user多对一关系。

我在数据库(使用uniqueConstraints )和UniqueEntity进行表单验证时强制执行此约束。 但是我无法理解Symfony2文档中关于这个约束的这句话:

这个必需的选项是这个实体应该是唯一的字段(或字段列表 )。 例如,您可以指定上面用户示例中的电子邮件和名称字段应该是唯一的。

但我需要这个nameuser唯一的整体 。 这是可能的和如何? 下面是一个不工作的例子:名字和用户都被检查为唯一字段。

/**
 * @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和相同的用户创建两个标签。


如果您希望nameuser的组合都是唯一的,请使用:

@UniqueEntity(fields={"name", "user"})

如果你想让它们分别独一无二,请使用以下命令:

@UniqueEntity(fields="name")
@UniqueEntity(fields="user")

这同样适用于表格上的唯一约束。


请注意:

对于yaml使用:

constraints:
    - SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity:
        fields: username
        groups: [SomeYourGroup]

或者注释:使用Symfony Bridge Doctrine Validator Constraints UniqueEntity;

  • @UniqueEntity(fields = {“username”},groups = {“SomeYourGroup”})
  • 在文档http://symfony.com/doc/current/reference/constraints/UniqueEntity.html

    团体不可用!!!

    链接地址: http://www.djcxy.com/p/57877.html

    上一篇: Symfony2 UniqueEntity validation constraint as concatenation?

    下一篇: Flex: Unrecognized rule error