Я использую Zend Framework в сочетании с Doctrine 2. В настоящее время я пытаюсь сделать следующее:
Сохранение пользователя с соответствующим языком по умолчанию, который уже существует в базе данных.
Итак, у меня есть две модели: пользовательская и языковая.
Атрибут языка пользовательской модели указывает на идентификатор языковой модели через опцию ManyToOne в доктрине.
Поэтому я использую следующий код в пользовательской модели для сопоставления двух моделей:
/**
* @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' ипотом я пытаюсь сопоставить его с пользователем, но на самом деле не знаю, как именно.
Это не сработает.Я получаю сообщение об ошибке.
Так как я могу относиться к языку, даже если он уже есть в базе данных (список всех поддерживаемых языков)?
Заранее спасибо!