У меня проблема в одном из моих проектов, где я использую 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?
Что произойдет, если вы напишете 'Timestampable: ~'? –
Это тот же результат. :/ Я определял поведение таким же образом на многих других моделях, и он отлично работает на них. Должно быть что-то, что я делаю неправильно с моделью пользователя ... – michenriksen
Хм ... странно ... Если я переименую модель на «Личность» и перестрою, она работает отлично !? - Возможно, я должен представить отчет об ошибке команде Doctrine. – michenriksen