Zend Framework + Doctrine 2:如何将现有条目(语言)映射到新条目(用户)?

时间:2012-01-12 00:22:20

标签: zend-framework doctrine-orm many-to-one

我正在使用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,然后我尝试将其映射到用户,但实际上我不知道具体如何。

这不起作用。我收到了错误。

那么我怎么能与语言联系起来,即使它已经存在于数据库中(所有支持的语言列表)?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为你的注释有点糊涂了。 使用ManyToOne注释,除非您想要两个实体之间的双向关系,否则不需要使用inversedBy。如果你确实想要你不会使用inversedBy =“id”,因为语言实体的id字段是它的主键,而不是用户引用。 看看documentation for ManyToOne association mapping