Doktrini davranışları ile ilgili sorunlar

1 Cevap php

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?

1 Cevap

Ne yayınlanmıştır kapalı tabanlı ve sonraki yorumlar, orada sizin User tablo ile isim çarpışma olduğunu ve mysql görüntülenir. user tablo. Eğer Person için tablo adını ne zaman belirtildiği gibi, beklendiği gibi çalıştı.

Benim durumumda, ben hep beklenmeyen davranışlar bu tür önlemek için Masamda bir rasgele tablo öneki ekleyin.