Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2 DBAL&;ORM设置_Orm_Symfony_Doctrine Orm - Fatal编程技术网

Symfony2 DBAL&;ORM设置

Symfony2 DBAL&;ORM设置,orm,symfony,doctrine-orm,Orm,Symfony,Doctrine Orm,所以我整个上午都在摆弄Symfony2,阅读主要文档或至少一半。我被困在任何与数据库有关的事情上 我的一个简单问题是:我们是否要事先准备好数据库结构 文档说明创建实体类,然后使用database:create on CLI生成数据库表。我遵循并创建了一个带有orm注释的博客实体类 运行命令: php app/console doctrine:database:create Warning: PDO::__construct(): [2002] No such file or directory

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

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

文档说明创建实体类,然后使用database:create on 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
我认为这与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中实现这一点。

原则:database:create命令不会填充表的结构,而是在数据库管理器(如MySQL)上创建数据库。要填充数据库结构,请在初始创建结构时使用
原则:架构:创建
命令,在对注释进行一些修改后要更新结构时,使用
原则:架构:更新--force
命令

正如您所提到的,您需要在Symfony2中配置一些参数,以使条令正常工作。这些参数需要在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团队正在简化配置,我认为现在有一种更简单的方法来配置条令参数。我建议您使用的示例就是我现在正在使用的Symfony2的Beta1

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

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

  • 更新config.yml(在app/config中)以包含条令配置参数
  • 打开提示并转到Symfony发行版的根文件夹(在那里可以看到应用程序、src、供应商和web文件夹)
  • 运行
    php应用程序/控制台:database:create
    在MySQL中创建数据库
  • 运行
    php应用程序/控制台原则:schema:create
    创建数据库结构
  • 在MySQL中检查数据库和结构是否已正确创建
  • 希望这有帮助

    问候,

    Matt

    如果使用MAMP,您可以在/var/mysql/文件夹中创建指向/Applications/MAMP/tmp/mysql/mysql.sock文件的符号链接

    首先检查您的/var/mysql文件夹是否存在,如果它没有使用:

    mkdir /var/mysql
    
    转到上面的文件夹,然后编写以下内容以创建符号链接

    sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
    
    您可能也有时区问题(与上述问题无关,但如果您是mamp用户,您可能也会有此问题),您可以通过将以下内容放入/private/etc/php.ini文件(注意:这不是您在mamp文件夹中找到的php.ini文件)来解决此问题

    注意:您可能需要更改您的实际时区,这可能与我的时区不同

    参考资料:


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

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

    在app/config/parameters.ini中,添加数据库\u套接字值:

    ;[parameters.ini]
    database_socket   = "/var/mysql/mysql.sock"
    
    然后在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
    

    这将把自定义套接字路径传递到doctrine的连接中。

    在数据库连接设置中使用
    unix\u socket
    参数我将在哪里定义模式??就像我们在schema.yml的Symfony1中所做的那样。我完全糊涂了,请帮忙。首先,我从未使用过Symfony1,但据我所知,Symfony2中没有单一的
    schema.yml
    。每个实体都必须有自己的模式文件,并且必须将它们放入如下文件中:
    @AcmeBundle/Resources/config/doctor/EntityClassName.orm.yml
    。阅读Symfony2官方书籍中的
    数据库和条令
    ,并切换到
    YAML
    选项卡,而不是默认的
    注释
    。从MAMP 2.0.5+Symfony 2.0.16开始,此ln命令是唯一能让“数据库和条令”一章中的代码正常工作的答案!谢谢。我找不到任何关于Lion和Sf 2.1的东西。2012年我们仍在使用的工具太糟糕了,这让我大吃一惊。我从1998年起就一直是一名开发人员,事情似乎变得更糟了
    # 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