Symfony2嵌入式表单和数据库重复



我有一个与实体用户有关的表单 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()){
    [...]
  }
}

相关内容

  • 没有找到相关文章

最新更新