2012-02-04 25 views
0

爲了加速單元測試,我想使用SQLite代替MySQL,所以我試圖從Propel的模式中獲得與SQLite兼容的數據庫轉儲。 XML。該應用程序是建立在Symfony2中,這是config.yml分貝配置的樣子:如何從Propel的schema.xml生成兼容sqlite3的轉儲

propel: 
    dbal: 
     driver:    sqlite    
     dsn:     sqlite:/tmp/test_db1.sq3 
     default_connection: db1 
     connections: 
      db1: 
       user:   %database_user% 
       password:  %database_password% 
       dsn: sqlite:/tmp/test_db1.sq3 
      db2: 
       user:   %database_user% 
       password:  %database_password% 
       dsn: sqlite:/tmp/test_db2.sq 

然而,命令app/console propel:build-sql總是生成未能加載到SQLite的MySQL特有轉儲。

我也從properties.ini中刪除了對MySQL的任何引用,但仍然沒有把它做對。

任何想法?

回答

1

每個連接名稱都必須與數據庫名稱相關,因此如果聲明連接c1,則需要具有屬性name="c1"(位於schema.xml)中的數據庫標記。

假設你有以下schema.xml

<database name="default"> 
    … 
</database> 

寫出下列內容放在config.yml

propel: 
    dbal: 
     default_connection: default 
     connections: 
      default: 
       driver:    mysql    
       username:    root 
       dsn:     mysql:host=localhost;dbname=my_db 

而且在config_test.yml如下定義:

propel: 
    dbal: 
     connections: 
      default: 
       driver:    sqlite    
       dsn:     sqlite:/tmp/test_db1.sq3 

然後,如果你想要生成爲你的測試SQL語句,只需要運行:

php app/console --env=test propel:build-sql 

要爲你的開發ENV SQL語句:

php app/console propel:build-sql 

php app/console --env=dev propel:build-sql 
+0

謝謝,它的工作原理!我想我沒有在連接本身中覆蓋驅動程序。 – nuqqsa 2012-02-28 22:43:17

0

我試圖讓示例正常工作,但是當我打電話時

./bin/console propel:database:create --env test 

我得到以下信息:

Use connection named default in test environment. 
No database name found. 

然後,我改變了DSN下列之一:

dsn:     sqlite:/tmp/test_db1.sq3;dbname=testdb 

dsn:     sqlite::memory 

但在這兩個,我收到以下錯誤信息:

[Propel] Exception caught           
SQLSTATE[HY000]: General error: 1 near "DATABASE": syntax error 

我在symfony 2.5.11上使用推動版本1.7.1,如果這很重要。