たとえばNULLの場合に備えて、エンティティ値を変更したいと思います。残念ながら、私のコードは例外を引き起こします - 「翻訳」レコードがデータベースに作成され、id が getId メソッドによって適切に返されますが、id が設定されていないようです。
非常に単純なコードですが、なぜ機能しないのでしょうか?
public function createAction(Request $request)
{
$entity = new Word();
$form = $this->createForm(new WordType(), $entity);
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
//works fine - database record is created
if($entity->getIdTranslation() == NULL){
$translation = new Translation();
$em->persist($translation);
$em->flush();
$entity->setIdTranslation($translation->getId());
}
$em->persist($entity);
//throws exception - Integrity constraint violation: 1048 Column 'id_translation' cannot be null
$em->flush();
return $this->redirect($this->generateUrl('admin_word_show', array('id' => $entity->getId())));
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
編集:私のモデルとマッピング情報の一部を追加しました:
Revelant Words マッピング:
/**
* @var integer $id_language
*
* @ORM\Column(name="id_language", type="integer")
*/
private $id_language;
/**
*@ORM\ManyToOne(targetEntity="Language", inversedBy="words")
*@ORM\JoinColumn (name="id_language", referencedColumnName="id")
*/
protected $language;
/**
*
* @ORM\ManyToOne(targetEntity="Translation", inversedBy="words")
* @ORM\JoinColumn(name="id_translation", referencedColumnName="id")
*/
protected $translation;
および翻訳:
class Translation
{
public function __construct() {
$this->words = new ArrayCollection();
}
/**
* @ORM\PrePersist()
*/
public function prePersist() {
$this->created_date = new \DateTime();
}
/**
*
* @ORM\OneToMany(targetEntity="Word" ,mappedBy="translation")
*/
protected $words;
また、補足: Symfony コンソール ツールではなく、データベース モデリング ソフトウェア (ワークベンチ) を使用して db モデルを作成しました。現在、db モデルを反映するようにエンティティをセットアップしようとしています。そのアプローチが正しいかどうかはわかりません - おそらく私のモデルは複雑すぎて Doctrine で適切に動作しませんか?