У меня есть форма UserType, связанная с объектом Пользователь. Эта форма вызывает другую форму: CityTypeВстраиваемые формы Symfony2 и дубликаты баз данных
<?php
namespace ...\SiteBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('city', new CityType(), array('label' => false))
->add(...);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'FindBack\SiteBundle\Entity\User',
'cascade_validation' => true
));
}
// ...
}
Пользователь зависимая таблица выглядит следующим образом:
id | city_id | ...
---|---------|-----
1 | 1 | ...
2 | 1 | ...
3 | 2 | ...
Вот CityType:
<?php
namespace FindBack\SiteBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'FindBack\SiteBundle\Entity\City',
));
}
public function getName()
{
return 'city';
}
}
Так что, когда я создаю Пользователь до Тип пользователя Форма, новый Город. Если я создаю пользователя дважды имя же города (то есть: Марсель), моя база данных будет выглядеть:
id name
--|----------
1 | Marseille
2 | Marseille
3 | Paris
...
Так что есть дубликат, и я хочу, чтобы избежать этого! Как я могу продолжить? Я попытался установить ограничение уникальности для имени поля таблицы City, но когда я хочу, чтобы создать еще один пользователя, «SQLSTATE [23000]: Integrity нарушение ограничения: 1062 записи Дублированного„Марселя“для ключа «имя» выбрасывается Symfony2. кажется, логика.
ли у меня проверить в контроллера, связанного с пользователя, если уже есть город, названный «Марсель» в базе данных, а затем доцентом существительное Город to my Пользователь?
Почему бы вам не предложить решение, в котором города уже вставлены база данных? – DonCallisto
@DonCallisto Я не уверен, чтобы понять, что вы имеете в виду ... Я не собираюсь заполнять мою базу данных всеми городами из Франции! – peltho
Итак, если я собираюсь заполнить ваше поле «город: лунная ракета», вы примете его? – DonCallisto