为了加快单元测试,我想使用SQLite而不是MySQL,所以我试图从Propel的schema.xml获得与SQLite兼容的数据库转储。该应用程序是在Symfony2中构建的,这就是config.yml
中的db配置的样子:
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
始终生成特定于MySQL的转储,无法加载到SQLite中。
我还从properties.ini中删除了对MySQL的任何引用,但仍然没有把它弄好。
有什么想法吗?
答案 0 :(得分: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
为dev env生成SQL语句:
php app/console propel:build-sql
或
php app/console --env=dev propel:build-sql
答案 1 :(得分: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,这是否很重要。