Symfony2 DBAL和ORM设置

Aay*_*ush 5 orm symfony doctrine-orm

所以我整个早上一直在摆弄Symfony2并阅读主要文档或至少一半.我被困在与数据库相关的任何事情上.

我的简单问题是:我们是否事先制作数据库结构?

文档说使用Entity类,然后使用database:create在CLI上生成数据库表.我跟着并创建了一个带有orm注释的博客实体类.

运行命令:

php app/console doctrine:database:create

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Applications/MAMP/htdocs/flairbagSy2/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php on line 36
Could not create database for connection named blog
SQLSTATE[HY000] [2002] No such file or directory
Run Code Online (Sandbox Code Playgroud)

我认为这与mysql套接字文件的位置有关,但我不知道如何在Symfony2的配置中更改套接字文件的路径.

如果有人可以指出我在哪里更改套接字文件的路径.

我曾经遇到类似CakePHP的问题,简单的解决方法是在数据库连接数组中添加一个端口密钥:

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'cake',
    'port' => '/Applications/MAMP/tmp/mysql/mysql.sock',
);
Run Code Online (Sandbox Code Playgroud)

我如何在Symfony2中做到这一点.

Mat*_*att 7

doctrine:database:create命令不会填充表的结构,而是像MySQL一样在数据库管理器上创建数据库.要填充数据库结构,请在对注释进行一些修改后更新结构时使用该doctrine:schema:create命令初始创建结构和doctrine:schema:update --force命令.

正如您所提到的,您需要在Symfony2中配置一些参数以使Doctrine正常工作.这些参数需要在config.yml配置文件中设置,您可以在标准Symfony2发行版的app/config文件夹中找到它们.以下是您需要添加到config.yml文件的配置示例:

# Doctrine Services Configuration
doctrine:
  dbal:
    default_connection: default
    connections:
      default:
        driver:   pdo_mysql
        host:     localhost
        port:     3396
        dbname:   dbname_dev
        user:     dbname_dev
        password: yourpassword
        logging:  "%kernel.debug%"

  orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    default_entity_manager: default
    entity_managers:
      default:
        mappings:
          AcmeBundle: ~
Run Code Online (Sandbox Code Playgroud)

配置的第一部分dbal部分用于配置数据库连接信息.我建议您首先测试与数据库的root帐户的连接,然后当一切正常时,更改设置以使用专用用户.这样,您确定没有某些特权问题或其他可能与专用用户相关的问题.

第二部分是orm部分,用于配置实体到数据库的映射.如果希望Symfony2自动填充数据库结构,则需要此部分.将AcmeBundle替换为上面示例中的包名称,以启用项目中的orm功能.

另外,Symfony2团队正在努力简化配置,我认为现在有一种更简单的方法来配置Doctrine参数.我建议你的样本是我现在正在使用的Symfony2的Beta1.

最后回答你的问题,我认为最好是让Symfony2处理创建和更新数据库结构.支持这一点的一个论点是您不需要维护处理数据库结构的SQL文件.您的实体中的注释会隐含地保存此信息,因此您只需更改注释并调用doctrine:schema:update --force命令即可更新结构.考虑到这一点,您不应该事先创建结构,而是让Symfony2为您创建它.

这是测试一切正常的工作流程:

  1. 更新config.yml(在app/config中)以包含Doctrine配置参数
  2. 打开提示并转到Symfony发行版的根文件夹(您可以在其中看到应用程序,src,供应商和Web文件夹)
  3. 运行php app/console doctrine:database:create以在MySQL中创建数据库
  4. 运行php app/console doctrine:schema:create以创建数据库结构
  5. 检查MySQL是否已正确创建数据库和结构

希望这有帮助.

问候,
马特


ste*_*ott 5

最初的问题是关于如何在Symfony2配置中定义非标准套接字.

我这样做的方法是在app/config/config.yml中添加一个新的配置设置,从项目参数文件(app/config/parameters.ini)中提取值.

在app/config/parameters.ini中,添加database_socket值:

;[parameters.ini]
database_socket   = "/var/mysql/mysql.sock"
Run Code Online (Sandbox Code Playgroud)

然后在app/config/config.yml中,拉入参数值:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        unix_socket: %database_socket%
        charset:  UTF8
Run Code Online (Sandbox Code Playgroud)

这会将自定义套接字路径传递给doctrine的连接.