Ben bir ORM olarak Doctrine kullanıyorum benim projelerinden biri, bir sorun var.
Modelleri ve veritabanı yapısını yeniden Nedense, Doktrin davranışları ve ilişkileri yok sayar, ben tablo tanımları birinde tanımlar. YAML tablo tanımı aşağıdaki gibidir:
...
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
...
Oluşturulan tablo yapısı bu gibi görünüyor:
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;
Gördüğünüz gibi, Doktrin ben tanımlayan tüm sütunları üretir, ama nedense otomatik olarak gerçekleşmesi beklenen tüm şeyler yapılmaz. Her şeyden önce, bu updated_at
oluşturmaz ve Timestampable davranış ve Sluggable davranış için slug
kolon için created_at
sütunlar da eksik.
Indeksler ve yabancı anahtar kısıtlamaları da eksik.
Ben oluşturulan modeli sınıfı kadar açtığınızda, tüm iyi görünüyor:
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);
}
....
}
Yani, sorun SQL sorgu nesil yatıyor ...
Başkasının benzer bir sorun yaşadı, ya da sen benim YAML tanımında herhangi bir hata nokta olabilir?