首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2数据库和对象模型设置

Symfony2数据库和对象模型设置
EN

Stack Overflow用户
提问于 2011-05-01 21:08:37
回答 3查看 12.2K关注 0票数 5

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

我的问题很简单:我们要不要提前做好数据库结构?

文档要求创建实体类,然后使用database:create on CLI生成数据库表。我遵循并创建了一个带有orm注释的博客实体类。

已运行以下命令:

代码语言:javascript
复制
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连接数组添加一个端口键:

代码语言:javascript
复制
var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'cake',
    'port' => '/Applications/MAMP/tmp/mysql/mysql.sock',
);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-02 14:58:55

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

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

代码语言:javascript
复制
# 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部分,用于配置您的数据库连接信息。我建议您首先测试与数据库的root帐户的连接,然后在一切正常时,将设置更改为使用专用用户。这样,您就可以确定您不会遇到某些权限问题或其他可能与专用用户相关的问题。

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

另外,Symfony2团队正在致力于简化配置,我认为现在有了一种更简单的方法来配置Doctrine参数。我建议您使用的示例就是我现在使用的Symfony2的Beta1。

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

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

  1. 更新您的配置(在config.yml /config.yml中),以在提示符中包含Doctrine配置,然后转到Symfony分发的根文件夹(在这里可以看到app、src、
    1. 和web文件夹)
    2. 运行php app/console doctrine:database:create以在MySQL

    中创建数据库并运行php app/console doctrine:schema:create以在MySQL中创建数据库配置确保数据库和结构已正确创建<代码>G217

希望这能有所帮助。

致以敬意,

哑光

票数 8
EN

Stack Overflow用户

发布于 2012-02-24 06:25:58

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

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

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

代码语言:javascript
复制
;[parameters.ini]
database_socket   = "/var/mysql/mysql.sock"

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

代码语言:javascript
复制
# 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的连接中。

票数 5
EN

Stack Overflow用户

发布于 2011-12-30 03:10:13

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

首先,使用以下命令检查/var/mysql文件夹是否存在:

代码语言:javascript
复制
mkdir /var/mysql

转到上面的文件夹,然后编写以下代码来创建符号链接

代码语言:javascript
复制
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

您可能还会遇到时区问题(与上面的问题无关,但如果您是mamp用户,您可能也会遇到这个问题),您可以通过将以下内容放入/private/etc/php.ini文件(注意:这不是您在MAMP文件夹中找到的php.ini文件)来修复此问题

代码语言:javascript
复制
date.timezone = "America/Montreal"

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

参考资料:http://www.iamseree.com/application-development/doctrine-error-on-mac-osx-it-is-not-safe-to-rely-on-the-systems-timezone-settings-you-are-required-to-use-the-date-timezone-setting-or-the-date_default_timezone_set-function

http://mikecroteau.wordpress.com/2011/08/07/symfony2-could-not-create-database-for-connection-named-sqlstatehy000-2002-no-such-file-or-directory/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5848543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档