Symfony2 DBAL&;ORM设置
所以我整个上午都在摆弄Symfony2,阅读主要文档或至少一半。我被困在任何与数据库有关的事情上 我的一个简单问题是:我们是否要事先准备好数据库结构 文档说明创建实体类,然后使用database:create on CLI生成数据库表。我遵循并创建了一个带有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
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为您创建它
以下是测试一切正常的工作流程:
php应用程序/控制台:database:create
在MySQL中创建数据库php应用程序/控制台原则:schema:create
创建数据库结构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