Symfony2数据库创建实体

时间:2014-07-17 17:54:40

标签: php symfony doctrine-orm

我最近从一位前同事那里继承了一堆Symfony2应用程序。我已经和Symfony2一起玩了,我已经了解了Acme演示的基本知识。我的老板希望我开始查看他编写的一些代码,因为有些东西需要立即更新。我应该注意,我开始全新安装symfony并开始重新创建我自己看到的东西 - 在每一点上我都在看我是如何做到的,而不是我以前的同事所做的。

我现在需要从已建立的数据库创建实体。我在app / config / parameters.yml

中设置了数据库配置

现在创建实体以匹配数据库的最佳方法是什么?我使用php app/console generate:doctrine:entities但是在输入所有字段后,我不断收到匹配错误,symfony会查找" status_id3"而不只是" status"。这是我得到的错误:

An exception occurred while executing 'SELECT t0.id AS id1, t0.library_id AS library_id2, t0.status_id AS status_id3, t0.name AS name4, t0.total AS total5, t0.available AS available6, t0.in_use AS in_use7, t0.offline AS offline8 FROM Lab t0 ORDER BY t0.name ASC':

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'labstats.Lab' doesn't exist

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

Doctrine是一个数据库抽象层。这意味着您编写的涉及Doctrine实体和getter / setter函数的所有代码都是Doctrine实际查询MySQL的高级抽象(使用AS语句和高度唯一的名称,以及获取对象的ID而不是实际的对象,只会懒得加载。)

所有这些都有很多细节,你可以从Doctrine文档中自学,但这是一个快速的概要。

无论哪种方式,你都误解了MySQL错误。当错误清楚地表明整个表t0.status_id AS status_id3不存在时,为什么你会认为MySQL抱怨labstats.Lab?可能的罪魁祸首是您的数据库架构与Doctrine Entities的元数据不匹配。

doctrine:generate:entities命令会自动为您自动创建getter / setter函数,但只有在您从控制台运行doctrine:schema:updateper this documentation.时才会触及数据库架构。{ {1}}标志,Doctrine将只验证架构并让您知道更新架构时需要进行的SQL查询的数量(可选择使用--force查看它们。)使用{{1} },Doctrine将为您运行它们(在生产环境中不推荐使用它。相反,您应该使用migrations。)