2009-12-16 2 views
2

У меня проблема в одном из моих проектов, где я использую Doctrine как ORM.Проблемы с поведением в доктрине

По какой-то причине при перестройке моделей и структуры базы данных Doctrine игнорирует поведение и отношения, которые я определяю в одном из определений таблиц. Определение YAML таблица выглядит следующим образом:

... 

User: 
    actAs: 
    Timestampable: 
    Sluggable: 
     unique: true 
     fields: username 
     canUpdate: true 
    columns: 
    id: 
     type: integer(4) 
     primary: true 
     autoincrement: true 
    company_id 
     type: integer(4) 
    timezone_id: 
     type: integer(1) 
    role_id: 
     type: integer(1) 
    email: 
     type: string(255) 
    username: 
     type: string(255) 
     unique: true 
    password: 
     type: string(40) 
    firstname: 
     type: string(255) 
    lastname: 
     type: string(255) 
    last_login: 
     type: datetime 
    relations: 
    Company: 
     local: company_id 
     foreign: id 
    Timezone: 
     local: timezone_id 
     foreign: id 
    Role: 
     local: role_id 
     foreign: id 

... 

Сформированная структура таблицы выглядит следующим образом:

CREATE TABLE `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `company_id` int(11) DEFAULT NULL, 
    `timezone_id` tinyint(4) DEFAULT NULL, 
    `role_id` tinyint(4) DEFAULT NULL, 
    `email` varchar(255) DEFAULT NULL, 
    `username` varchar(255) DEFAULT NULL, 
    `password` varchar(40) DEFAULT NULL, 
    `firstname` varchar(255) DEFAULT NULL, 
    `lastname` varchar(255) DEFAULT NULL, 
    `last_login` datetime DEFAULT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `username` (`username`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Как вы можете видеть, Doctrine генерирует все столбцы I определяют, но по какой-то причине всех вещей что предполагается автоматически, это не делается. Прежде всего, он не создает столбцы и created_at для поведения Timestampable и столбца slug для поведения Sluggable также отсутствует.

Индексы и ограничения внешнего ключа также отсутствуют.

Когда я открываю сгенерированный класс модели, это выглядит все хорошо:

class BaseUser extends Doctrine_Record 
{ 

    .... 

    public function setUp() 
    { 
     parent::setUp(); 
     $this->hasOne('Company', array(
      'local' => 'company_id', 
      'foreign' => 'id')); 

     $this->hasOne('Timezone', array(
      'local' => 'timezone_id', 
      'foreign' => 'id')); 

     $this->hasOne('Role', array(
      'local' => 'role_id', 
      'foreign' => 'id')); 

     $timestampable0 = new Doctrine_Template_Timestampable(); 
     $sluggable0 = new Doctrine_Template_Sluggable(array(
      'unique' => true, 
      'fields' => 'username', 
      'canUpdate' => true, 
     )); 
     $this->actAs($timestampable0); 
     $this->actAs($sluggable0); 
    } 

    .... 

} 

Таким образом, проблема заключается в генерации запросов SQL ...

Кто-нибудь еще испытал подобную проблему, или вы можете обнаружить какие-либо ошибки в моем определении YAML?

+1

Что произойдет, если вы напишете 'Timestampable: ~'? –

+0

Это тот же результат. :/ Я определял поведение таким же образом на многих других моделях, и он отлично работает на них. Должно быть что-то, что я делаю неправильно с моделью пользователя ... – michenriksen

+0

Хм ... странно ... Если я переименую модель на «Личность» и перестрою, она работает отлично !? - Возможно, я должен представить отчет об ошибке команде Doctrine. – michenriksen

ответ

0

Основываясь на том, что вы опубликовали, и в последующих комментариях, появляется столкновение имен с вашим столом User и mysql. user таблица. Как вы упомянули, когда вы переименовали свою таблицу в Person, она работала так, как ожидалось.

По моему опыту, я всегда добавляю произвольный префикс таблицы к моим таблицам, чтобы избежать подобных типов неожиданного поведения.

Смежные вопросы