我正在使用zend框架和doctrine 2。 我目前要做的是以下内容:
使用相关的默认语言保存用户,该语言已存在于数据库中。
所以我有两个模型:用户和语言。
用户模型的language-attribute通过doctrine的ManyToOne选项指向语言模型的id。
所以我在用户模型中使用以下代码来完成两个模型的映射:
/**
* @var integer $language
* @ManyToOne(targetEntity="Application_Model_Language", inversedBy="id", cascade={"persist"})
*/
private $language;
外键在mysql数据库中更新。 所以到目前为止一切都还不错。
代码如下:
$defaultLanguage = $this->getUserLanguage('en');
$language = new Application_Model_Language();
$language->__set('id', $defaultLanguage);
$language->__set('name', $defaultLanguage);
$user = new Application_Model_User($username, $email, $array['password'], $array['salt']);
$user->__set('language', $language);
$user->save($user);
private function getUserLanguage($defaultLanguage){
$registry = Zend_Registry::getInstance();
$this->_em = $registry->entitymanager;
$queryBuilder = $this->_em->createQueryBuilder();
$query = $queryBuilder->add('select', 'l.id')
->add('from', 'Application_Model_Language l')
->add('where', 'l.name = ?1')
->setParameter(1, $defaultLanguage)
->getQuery();
$result = $query->execute();
return $result[0]['id'];
}
因此,使用上面的代码,我首先获得名为'en'的语言ID,然后我尝试将其映射到用户,但实际上我不知道具体如何。
这不起作用。我收到了错误。
那么我怎么能与语言联系起来,即使它已经存在于数据库中(所有支持的语言列表)?
提前致谢!
答案 0 :(得分:0)
我认为你的注释有点糊涂了。 使用ManyToOne注释,除非您想要两个实体之间的双向关系,否则不需要使用inversedBy。如果你确实想要你不会使用inversedBy =“id”,因为语言实体的id字段是它的主键,而不是用户引用。 看看documentation for ManyToOne association mapping。