在 Symfony2 项目中,您可以在 app/config/parameters.ini 文件中配置数据库连接。文档指出您可以使用 sqlite3 PDO 驱动程序等。
但是配置sqlite效果不太好:
[parameters]
database_driver = pdo_sqlite
database_host = localhost
database_port =
database_name = test_project.db
database_user = root
database_password =
使用app/console主义:database:create,成功在项目根目录创建了一个test_project.db文件。
但是创建一些实体后,然后运行 app/console 原则:schema:update --force 应该在数据库文件上创建表,但事实并非如此,文件显示为空,大小为 O 字节。
请注意,使用任何其他 PDO 驱动程序都可以很好地工作,但不能使用 SQLite...
我还尝试在database_name参数中使用db文件的完整路径,但无济于事,数据库仍然没有更新。
作为参考,这里是 config.yml 文件的 dbal 学说部分:
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
有办法解决这个问题吗?缺少配置? symfony2 项目的官方文档中没有说明什么吗?
根据Doctrine,用于sqlite DBAL配置的元素是:
这也列在 Symfony2 中完整的 Doctrine 配置参考中,尽管没有详细说明。
因此您需要切换配置参数以匹配适合 sqlite 的参数。
这是我需要让 SQLite 工作的,就在完成之后
symfony new myapp
:
在
app/config.yml
:
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_sqlite
path: "%database_path%"
在
app/config/parameters.yml
:
parameters:
database_path: "%kernel.root_dir%/db/myapp_%kernel.environment%.db3"
...
接下来我可以做一个
composer install
,创建一个新实体,它就起作用了。
我发现,如果我将指向database_name的路径行添加到我的config.yml中,sqlite似乎会识别它,并且MySQL似乎不会抱怨。
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
path: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
这意味着您仍然可以将所有数据库信息保留在参数文件中,不需要根据您使用的数据库进行单独的配置。
主要是文件路径或者文件路径权限会有问题。
在 config.yml 中,将路径设置为完整路径,如
/home/{名称}/NB/PHP/Symfony/test/src/Database/data.db3
不要提供%database_path%或其他任何内容。试试这个会有效果的。
如果有效,您可以给予
%kernel.root_dir%/../src/Database/%database_path%
同时检查 sqlite 是否正常
phpinfo(INFO_MODULES);
在视图/输出中您可以看到 pdo_sqlite 及其版本。
在我的例子中,在 config/packages/doctrine.yaml 中设置用户名和密码没有创建受用户名/密码保护的 sqlite 数据库。
doctrine:
dbal:
charset: UTF8
url: '%DATABASE_URL%'
user: 'foo'
password: 'bar'
好像参数用户名和密码被忽略了?