2010-01-18 43 views

回答

0

修改您的架構,但不建立模型。運行doctrine schema diff,然後爲你生成一個遷移類。最後,你可以重建你的模型/表格/過濾器

20
  1. 修改架構

  2. 運行./symfony doc:generate-migrations-diff

    這將產生的lib /遷移/學說的一個或多個文件/

  3. 運行./symfony doc:migrate

    這會將生成的遷移應用於數據庫

  4. 運行./symfony doc:build --all-classes

    這個作品爲symfony1.2> = 1.3/1.4,並且將根據所述修改過的模式

記住遷移產生比較所述重建的所有形式/濾波器/模型類將新的schema.yml添加到當前的模型類中,因此如果在運行generate-migrations-diff之前重新生成類,那麼就會導致錯誤。

1

快捷鍵:

symfony doctrine:build --all-classes --and-migrate 
+0

需要做./symfony doc:generate-migrations-diff首先我想。 – Populus 2011-04-13 08:58:17

4

在你需要編寫自己的遷移腳本的情況下,這裏的語法的一個例子 - 我還沒有找到語法正確的說明書中任何地方。

$this->addColumn('tablename', 'column_name', 'enum', false, 
        array('fixed' => 1, 
         'values' => 
         array(0 => 'auto', 
           1 => 'manual', 
           2 => 'unknown'), 
         'default' => 'unknown', 
         'notnull' => true, 
         'length' => NULL, 
        )); 
-1
Model: 
    column: 
    type: enum 
    values: [one, two, three] 

(optional:) 
    notnull: false 
    default: one #or two or three 
0

從學說遷移運行它的最簡單方法就是註冊一個新的映射。然後,如果需要,您可以在您的實體內強制執行值。 (Doctrine MySQL Enums

public function up(Schema $schema) 
{ 
    $this->connection->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); 
    ... 
} 
0

我有同樣的問題,發現一套解決這個標誌ProjectConfiguration.class.php

public function configureDoctrine(Doctrine_Manager $manager) { 
    $manager->setAttribute(Doctrine_Core::ATTR_USE_NATIVE_ENUM, true); 
} 

後,我用這個方法調用,並得到原生MySQL的枚舉:

class MyMigration extends Doctrine_Migration_Base { 
    public function up() { 
     $this->changeColumn(self::tableName, 'columName', 'enum', null, 
      array(
       'fixed' => true, 
       'length' => null, 
       'notnull' => true, 
       'values' => array(
        0 => 'Option 1', 
        1 => 'Option 2' 
       ) 
      ) 
     ); 
}