因此,我整个上午都在摆弄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为您创建它。这是测试一切正常的工作流程:
php app/console doctrine:database:create
在MySQL中创建数据库php app/console doctrine:schema:create
创建数据库结构希望对您有所帮助。
问候,
马特
关于orm - Symfony2 DBAL和ORM设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5848543/