所以我整个早上都在使用Symfony2,并阅读主要文档或至少一半。我被困在与数据库有关的任何事情上。
我的简单问题是:我们是否事先制作数据库结构?
文档说明创建Entity类,然后使用database生成数据库表:在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类似的问题,简单的解决方法是在数据库连接数组中添加一个端口密钥:
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => 'root',
'database' => 'cake',
'port' => '/Applications/MAMP/tmp/mysql/mysql.sock',
);
我如何在Symfony2中做到这一点。
答案 0 :(得分: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: ~
配置的第一部分dbal部分用于配置数据库连接信息。我建议您首先测试与数据库的root帐户的连接,然后当一切正常时,更改设置以使用专用用户。这样,您确定没有某些特权问题或其他可能与专用用户相关的问题。
第二部分,orm部分,用于配置实体到数据库的映射。如果希望Symfony2自动填充数据库结构,则需要此部分。将AcmeBundle替换为上面示例中的包名称,以启用项目中的orm功能。
另一方面,Symfony2团队正在努力简化配置,我认为现在有一种更简单的方法来配置Doctrine参数。我建议你的样本就是我现在正在使用Symfony2的Beta1。
最后回答你的问题,我认为最好是让Symfony2处理创建和更新数据库结构。支持这一点的一个论点是您不需要维护处理数据库结构的SQL文件。您的实体中的注释会隐含地保存此信息,因此您只需更改注释并调用doctrine:schema:update --force
命令即可更新结构。考虑到这一点,您不应该事先创建结构,而是让Symfony2为您创建它。
以下是测试一切正常的工作流程:
php app/console doctrine:database:create
以在MySQL中创建数据库php app/console doctrine:schema:create
以创建数据库结构希望得到这个帮助。
的问候,
马特
答案 1 :(得分:5)
最初的问题是关于如何在Symfony2配置中定义非标准套接字。
我这样做的方法是在app / config / config.yml中添加一个新的配置设置,从项目参数文件(app / config / parameters.ini)中提取值。
在app / config / parameters.ini中,添加database_socket值:
;[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的连接。
答案 2 :(得分:2)
如果使用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文件)
date.timezone = "America/Montreal"
注意:您可能需要更改实际时区,这可能与我的时区不同。