首先,我知道如何在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'
));
}
}
我的期望:
现实中似乎做了什么:
handleRequest()
方法时,它会检查唯一约束。嘿,但问题和等级属性都没有改变,所以怎么回事?
此外,当我查看日志时,检查约束的请求如下所示:
SELECT a.a, a.b, a.c, ... FROM Answer a WHERE a.question = ? AND a.rank = ?
与简单的SELECT COUNT()...
相比,这是一个非常繁重的请求。 COUNT
应该足够了,不是吗?
对我来说这是一个问题,因为我的项目会执行许多小更新,例如上例中的更新,会触发这种非优化行为。
我误解了什么吗?我可以改变这种行为吗?