因此,我整个上午都在摆弄Symfony2,并阅读了主要文档或其中的至少一半。我被困在与数据库有关的任何事情上。

我的简单问题是:我们是否事先准备好数据库结构?

文档说创建Entity类,然后在CLI上使用database:create生成数据库表。我跟随并制作了一个带有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

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

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

我曾经在CakePHP上遇到过类似的问题,简单的解决方法是在db连接数组中添加端口键:
var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'cake',
    'port' => '/Applications/MAMP/tmp/mysql/mysql.sock',
);

我该如何在Symfony2中做到这一点。

最佳答案

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: ~

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

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

附带一提,Symfony2团队正在努力简化配置,我认为现在有一种更简单的方法来配置Doctrine参数。我建议您使用的示例是我现在正在使用Symfony2 Beta1的示例。

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

这是测试一切正常的工作流程:
  • 更新您的config.yml(在app/config中)以包含Doctrine配置参数
  • 打开提示,然后转到Symfony发行版的根文件夹(您可以在其中查看应用程序,src,供应商和Web文件夹)
  • 运行php app/console doctrine:database:create在MySQL中创建数据库
  • 运行php app/console doctrine:schema:create创建数据库结构
  • 在MySQL中检查数据库和结构是否已正确创建

  • 希望对您有所帮助。

    问候,
    马特

    关于orm - Symfony2 DBAL和ORM设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5848543/

    10-11 23:00