【发布时间】:2010-04-10 17:52:51
【问题描述】:
在一个新项目开始时,我在 symfony 和教义方面遇到了一些大问题。我已经用 mysql 工作台创建了数据库图,将 sql 插入到 phpmyadmin 中,然后我尝试了 symfony 学说:build-schema 来生成 YAML 模式。 它会生成错误的模式(删除/更新时没有关系),在此之后我尝试了 symfony 学说:build --sql 和 symfony 学说:insert-sql
insert-sql 语句产生错误(can't create table ... failed query alter table add constraint ....),所以我决定看一下生成的sql,我发现mysql workbench 生成的sql(完美运行,包括关系)和教义生成的sql有些区别。
从现在开始我会很短:我必须对表、事件和表单以及 1 对 n 关系(每个事件可能有多种形式),所以正确的约束(使用工作台生成)是
ALTER TABLE `form` ADD CONSTRAINT `fk_form_event1` FOREIGN KEY (`event_id`) REFERENCES `event` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
doctrine 生成的语句是:
ALTER TABLE event ADD CONSTRAINT event_id_form_event_id FOREIGN KEY (id) REFERENCES form(event_id);
它完全颠倒了,我确信这是错误的。我该怎么办?这样也对吗?
【问题讨论】:
-
SQL 生成器太旧了。不要使用它。用 YAML 编写模式,您就可以准确控制生成的 SQL。这并不难。
-
Doctrine SQL 内省受到限制/破坏(如果这是真的)是不可接受的——Propel 绝对不是这种情况。 YAML 是一种比 DBDesigner 更差的数据库设计工具,并且仅仅因为它足够简单并不意味着让它变得更简单没有公平的意义。
标签: schema symfony1 doctrine yaml