私は次のモデルを持っています:
class Word{
...........
/**
* @ManyToOne(targetEntity="Language", cascade={"persist"})
* @JoinColumn(name="language_id", referencedColumnName="id")
*/
protected $language;
..........................
}
class Language{
/**
* @Id
* @Column(type="integer", nullable=false)
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Column(type="string", unique=true, nullable=false)
*/
protected $language;
........
}
データベースには 3 つの異なる言語の 3 つのレコードがあります。言語はユニークです。
新しい単語を作成し、それを既存の言語の 1 つに関連付けることができません。つまり、Word の FK を言語の PK に設定する方法を知りたいです。また、モデル内の FK は int ID ではなくオブジェクト参照として存在するため、実装方法について混乱しています。Doctrine_Query::create()-> を使用しようとしましたが、それも失敗しました。
私はこれを試しました:
$this->em = $this->doctrine->em;
$w = $this->input->post('word');
$d = $this->input->post('description');
$desclan = $this->input->post('desclan'); //language is selected from a drop down
//list populated from the DB
$wordlan = $this->input->post('wordlan');
$word = new Entity\Word;
$description = new Entity\Description;
$language = new Entity\Language;
$language->setLanguage($wordlan);
$language->setLanguageId($lanId); // assuming that $lanId is obtained from DB
$word->setWord($w);
$word->setLanguage($language);
$description->setDescription($d);
$word->setDescrp($description);
$this->em->persist($word);
$this->em->flush();
言語はドロップダウン リストで選択します。もちろん、このコードは、言語がデータベースに既に存在することを吐き出します。Doctrineコードを介して、言語のIDを取得し、データベースの「単語」テーブルにFK language_idとして配置するにはどうすればよいですか?
前もって感謝します!