「都市」エンティティと多対一の関係を持つ「人」エンティティがあります。
人の関係のマッピングは次のとおりです。
/**
* @ORM\ManyToOne(targetEntity="City", inversedBy="persons", cascade={"persist"})
*/
private $city;
および市の:
/**
* @ORM\OneToMany(targetEntity="Person", mappedBy="city")
*/
private $persons;
doctrine:generate:crud によって生成された基本的な Symfony 2 'person' コントローラーを使用します。
$entity = new Person();
$form = $this->createForm(new PersonType(), $entity);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
}
PersonType フォーム タイプは CityType をインスタンス化します
class PersonType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('city', new CityType())
->add('firstname')
->add('lastname')
->add('gender')
...
CityType フォーム タイプには 1 つのテキスト フィールドがあります
class CityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('cityname', 'text');
}
}
フォームを送信すると、cascade={"persist"} のおかげで、Person エンティティと City エンティティが作成されます。
DB に既に存在する都市名をフォームに入力すると問題が発生し、Doctrine は同じ都市名で別のエントリを作成します。
Doctrine がそれを検出し、Person テーブルで既存の city_id を使用する簡単な方法はありますか?