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

时间:2012-03-04 02:55:28

标签: sqlite symfony doctrine-orm

在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 doctrine:database:create,在项目根目录下成功创建一个test_project.db文件。

但是在创建了一些实体之后,运行app / console doctrine:schema:update --force应该在数据库文件上创建表,但它没有,文件显示为空,O字节大小。

请注意,使用任何其他PDO驱动程序效果很好,但不能使用SQLite ...

我也尝试在database_name参数中使用db文件的完整路径,但无济于事,数据库仍然没有得到更新。

供参考,这是config.yml文件的doctrine dbal部分:

doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8

有解决方法吗?配置缺失?在symfony2项目的官方文档中没有说明的内容?

5 个答案:

答案 0 :(得分:23)

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

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

这也列在Symfony2中的完整reference for Doctrine configuration中,但未详细说明。

因此,您需要切换配置参数以匹配适用于sqlite的内容。

答案 1 :(得分:5)

在执行symfony new myapp后,我需要让SQLite正常工作:

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 :(得分: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

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

答案 3 :(得分:2)

主要是文件路径或文件路径permisssion会有问题。

config.yml 中,将路径设置为完整路径,如

  

/家庭/ {名称} /NB/PHP/Symfony/test/src/Database/data.db3

不要给%database_path%或者什么。试试这个它会起作用。

如果有效,你可以给出

  

%kernel.root_dir%/ .. / SRC /数据库/%database_path%

还可以通过

检查sqlite是否正常
  

的phpinfo(INFO_MODULES);

在视图/输出中,您可以看到pdo_sqlite及其版本。

答案 4 :(得分:1)

就我而言,在config / packages / doctrine.yaml中设置用户名和密码未创建受用户名/密码保护的sqlite数据库

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

似乎用户名和密码参数被忽略了吗?