Symfony2 UniqueEntity约束如何工作?

时间:2014-12-10 10:57:20

标签: php symfony constraints

首先,我知道如何在Symfony2中使用唯一约束。这是一个关于它如何在幕后工作的问题。

例如,我有这样的约束:

company\TestBundle\Entity\Answer:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
            fields: [question, rank]

我有一个简单的表格,有一个字段:

class AnswerLabelType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('label');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'company\TestBundle\Entity\Answer'
        ));
    }
}

我的期望:

  • 每次我选择一个答案实体并更改问题属性或排名属性时,它都会检查数据库中是否存在新的值问号/排名。
  • 使用上面的表单,验证唯一约束是无用的(有一个值得注意的例外:如果创建了新的Answer实体,但我们认为这不是此表单的目的)。

现实中似乎做了什么:

  • 当我使用handleRequest()方法时,它会检查唯一约束。

嘿,但问题和等级属性都没有改变,所以怎么回事?

此外,当我查看日志时,检查约束的请求如下所示:

SELECT a.a, a.b, a.c, ... FROM Answer a WHERE a.question = ? AND a.rank = ?

与简单的SELECT COUNT()...相比,这是一个非常繁重的请求。 COUNT应该足够了,不是吗?

对我来说这是一个问题,因为我的项目会执行许多小更新,例如上例中的更新,会触发这种非优化行为。

我误解了什么吗?我可以改变这种行为吗?

0 个答案:

没有答案