我有一个与实体用户有关的表单 usertype 。此表格称为另一种形式: cityType
<?php
namespace ...SiteBundleFormType;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;
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' => 'FindBackSiteBundleEntityUser',
'cascade_validation' => true
));
}
// ...
}
用户关联的表看起来像:
id | city_id | ...
---|---------|-----
1 | 1 | ...
2 | 1 | ...
3 | 2 | ...
这是 cityType :
<?php
namespace FindBackSiteBundleFormType;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;
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' => 'FindBackSiteBundleEntityCity',
));
}
public function getName()
{
return 'city';
}
}
因此,当我通过 USERTYPE 表单创建用户时,创建了一个新的 City 。如果我用相同的城市名称(即:Marseille)两次创建用户,我的数据库将看起来像:
id name
--|----------
1 | Marseille
2 | Marseille
3 | Paris
...
所以有重复的内容,我想避免它!我该如何继续?我试图为 city 表的 name 字段设置唯一约束,但是当我想创建另一个用户时,a >"SQLSTATE [23000]:完整性约束违规:1062重复条目" Marseille"键"名称" 是由Symfony2抛出的。
似乎是逻辑。确实有我在数据库中已经有一个名为" Marseille" 的城市,然后在数据库中与 user 关联的 controller 将存在者 City 与我的用户?
首先您需要:
- 您将发布表格的控制器
- 您城市实体的存储库
这只是一个例子,因为我对您的应用程序一无所知:
use SymfonyComponentHttpFoundationRequest;
public function registerUserAction(Request $request) {
[...]
$cr = $this->getDoctrine()->getManager()->getRepository('CityRepository');
[...]
$user = new User();
$form = $this->createForm(new $form(...), $user);
$form->bind($request);
//get the field from form
$cn = $request->get('city_name');
//search for a pre existent entity
$city = $cn->findOneByCityName($cn);
if($city) {
$user->setCity($city);
}
if($form->isValid()){
[...]
}
}