我有以下模型:
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 条记录。一种语言是独一无二的。
我无法创建一个新单词并将其链接到现有语言之一。即我想知道如何将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 放在数据库的“单词”表中?
先感谢您!