我将zend框架与规则2结合使用。我目前尝试做的事情如下:
使用数据库中已存在的相关默认语言保存用户。
所以我有两个模型:用户和语言。
用户模型的语言属性通过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,然后尝试将其映射到用户,但实际上我不知道具体是如何映射的。
这行不通。我得到一个错误。
那么,即使它已经在数据库中(所有支持的语言列表),我如何才能与该语言相关呢?
提前感谢!
发布于 2012-02-09 04:49:28
我认为你的注解有点混乱。如果您确实希望这样做,就不应该使用inversedBy=" id“,因为语言实体的id字段是它的主键,而不是用户引用。看一看documentation for ManyToOne association mapping。
https://stackoverflow.com/questions/8828620
复制相似问题