gpt4 book ai didi

validation - Symfony2 UniqueEntity 多个字段 : false positive validation?

转载 作者:行者123 更新时间:2023-12-03 17:09:27 28 4
gpt4 key购买 nike

我正在尝试通过在多个字段上使用 UniqueEntity Validation Constraint 来验证从表单提交的实体的唯一性。

应该唯一的实体代码有两个字段 - fieldA fieldB ,两者都是独一无二的:

/**
* @ORM\Table(name="mytable")
* @ORM\Entity
* @DoctrineAssert\UniqueEntity(fields = {"fieldA", "fieldB"})
*/
class myClass
{
/**
* @ORM\Column(name="fieldA", type="string", length=128, unique=true)
*/
protected $fieldA;

/**
* @ORM\Column(name="fieldB", type="string", length=128, unique=true)
*/
protected $fieldB;
}

假设我已经在数据库中有一个包含值的记录:
  • fieldA = 'value_a', fieldB = 'value_b'

  • 现在,当我尝试从表单提交另一个带有值 (fieldA = 'value_a', fieldB = 'value_c') 的表单时,Symfony2 生成一个查询来检查唯一性:
    SELECT ... FROM ... WHERE fieldA = ? AND fieldB = ? ('value_a', 'value_c')

    并且验证通过,因为结果是一个空集,但是 我希望它会失败,因为在这种情况下 fieldA 不会是唯一的 . (SQL 插入失败,'value_a' 上出现重复条目​​错误。)

    Symfony2's UniqueEntity documentation says :

    This required option is the field (or list of fields) on which this entity should be unique. For example, you could specify that both the email and name fields in the User example above should be unique.



    我认为这证实了我的期望。

    我发现了 in the source of UniqueEntityValidator (line 94) ,验证器将字段作为数组,并使用“findBy”魔术查找器方法来检查唯一性。此方法在查询中的参数之间使用“AND”关系,这会导致问题。

    是否可以以某种方式将此验证约束用于我的问题,或者我必须以另一种方式对其进行验证?

    最佳答案

    它应该是:

    /**
    * @ORM\Table(name="mytable")
    * @ORM\Entity
    * @DoctrineAssert\UniqueEntity(fields = "fieldA")
    * @DoctrineAssert\UniqueEntity(fields = "fieldB")
    */
    class myClass

    通过做
     * @DoctrineAssert\UniqueEntity(fields = {"fieldA", "fieldB"})

    它将检查是否有两个字段相同的行。

    因此,假设您在数据库中已经有一个包含值的记录:
    fieldA = 'value_a', fieldB = 'value_b'

    现在,当您尝试从表单提交另一个具有值 (fieldA = 'value_a', fieldB = 'value_c') 的表单时,Symfony2 会生成一个查询来检查唯一性:

    SELECT ... FROM ... WHERE fieldA = ?与字段B = ? ('value_a', 'value_c')

    这将通过,因为它与一行不匹配
    fieldA = 'value_a', fieldB = 'value_b'

    仅当您从表单提交另一个具有值 (fieldA = 'value_a', fieldB = 'value_b') 时,验证不会通过。

    这是它应该工作的方式以及它在文档中的解释方式:
    http://symfony.com/doc/current/reference/constraints/UniqueEntity.html#fields

    关于validation - Symfony2 UniqueEntity 多个字段 : false positive validation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8491675/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com