Прежде всего, я знаю, как использовать уникальные ограничения в 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
должно быть достаточно, не так ли?
Это проблема для меня, потому что мой проект делает много маленьких обновлений, подобных приведенному выше, которые вызывают неоптимизированное поведение.
Я что-то не так понял? Могу ли я изменить это поведение?
Задача ещё не решена.
Других решений пока нет …