我最近从一位前同事那里继承了一堆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
非常感谢你的帮助!
答案 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:update
为per this documentation.时才会触及数据库架构。{ {1}}标志,Doctrine将只验证架构并让您知道更新架构时需要进行的SQL查询的数量(可选择使用--force
查看它们。)使用{{1} },Doctrine将为您运行它们(在生产环境中不推荐使用它。相反,您应该使用migrations。)