如何在symfony2项目上使用sqlite数据库?

问题描述 投票:0回答:5

在 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 项目的官方文档中没有说明什么吗?

sqlite symfony doctrine-orm
5个回答
25
投票

根据Doctrine,用于sqlite DBAL配置的元素是:

  • user (字符串):连接到数据库时使用的用户名。
  • password (字符串):连接数据库时使用的密码。
  • path (字符串):数据库文件的文件系统路径。与记忆是互斥的。路径优先。
  • 内存 (布尔值):如果 SQLite 数据库应位于内存中(非持久性),则为 true。与路径互斥。路径优先。

这也列在 Symfony2 中完整的 Doctrine 配置参考中,尽管没有详细说明。

因此您需要切换配置参数以匹配适合 sqlite 的参数。


6
投票

这是我需要让 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
,创建一个新实体,它就起作用了。


2
投票

我发现,如果我将指向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

这意味着您仍然可以将所有数据库信息保留在参数文件中,不需要根据您使用的数据库进行单独的配置。


2
投票

主要是文件路径或者文件路径权限会有问题。

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 及其版本。


1
投票

在我的例子中,在 config/packages/doctrine.yaml 中设置用户名和密码没有创建受用户名/密码保护的 sqlite 数据库

doctrine:
    dbal:
        charset:  UTF8
        url: '%DATABASE_URL%'
        user:     'foo'
        password: 'bar'

好像参数用户名和密码被忽略了?

© www.soinside.com 2019 - 2024. All rights reserved.