2010-09-04 96 views
2

我在修改doctrine 2的遷移表時遇到了一些問題。以下代碼始終引發錯誤:平臺不支持「Doctrine \ DBAL \ Platforms \ AbstractPlatform :: getAlterTableSQL」操作。Doctrine 2 migrations如何使用sqlite數據庫更改表?

這很奇怪,因爲sqlite支持alter table。

public function up(Schema $schema) 
{ 
    $user = $schema->getTable('user'); 
    $user->addColumn('resellerId', 'integer', array(
     'length'  => '10', 
     'notnull'  => true, 
     'unsigned'  => true, 
    )); 
} 

回答

4

即使ALTER TABLE是「支持」,由sqlite的,將允許操作的集合是最小的相比大多數其他數據庫(http://www.sqlite.org/lang_altertable.html),因此爲什麼它被認爲是不被教條DBAL支持。

+0

我也測試了這個在mysql數據庫上,它的工作完美。 – tom 2010-09-05 18:54:28

+0

那麼?這不會改變我的陳述。 Mysql!= Sqlite。請仔細閱讀我的答案。 – romanb 2010-09-05 22:12:39

+2

我的確仔細閱讀了你的答案,但我認爲Doctrine DBAL統一了所有的SQL以處理一組數據庫,比如MySQL SQLite,MSSQL,Oracle ......或者我錯了? – tom 2010-09-06 05:10:56

0

在使用ORM時,我注意到MySQL和SQLite之間有一些小問題。 使用Doctrine,我發現外鍵關係不像SQLite那樣在MySQL中維護。

這是一個痛苦,因爲我在內存dbs中使用SQLite進行單元測試,因爲我無法保證在SQLite中傳遞的持久性測試也通過MySQL。

實際上,爲了讓SQLite在內存中使用Doctrine,我必須調整Doctrine SQLite驅動程序(代碼爲http://thecodeabode.blogspot.com/2010/12/dropping-sqlite-in-memory-databases-in.html),因爲在內存dbs中爲刪除數據庫生成的sql語法失敗。