如何从EER图开发Web应用程序?

时间:2015-07-27 18:37:35

标签: symfony doctrine-orm

我正在寻找有关如何从EER图开始在Symfony2中开发Web应用程序的建议。我很欣赏你认为合理的开发方式的逐步入门。

另外,有什么我应该注意避免以后的失败吗?

请建议我使用的任何工具。

更新:让我澄清一下。说我有下面的EER图。一个问题是:是否有工具将其转换为symfony实体类,并且关于关系的正确注释(1:N或N:M)?

enter image description here

进一步澄清。 假设我已经开发了如上所述的EER图。 通过Workbench Export,我可以获取sql查询来创建相应的mySQL表;因此我可以使用Doctrine / Symfony2的app/console doctrine:mapping:import来获取我可能用来生成我的实体类的模式。 然而,这一切并不是我想要的,因为我想避免那种逆向工程。所以,问题是:有没有办法将EER图导出到实体类直接,并将mySQL表创建为最后一步?

如果Workbench / Doctrine / Symfony无法实现这一点,那么我可以使用不同的工具组合吗? (Zend; Ruby on Rails,......)

更新,看来Skipper Skipper正在寻找我想要的东西。不幸的是它不是免费的/开源的(确实有点贵)。 Skipper有一个导出到ORM 工具,它从EER图中为Doctrine(或其他ORM)创建实体类。我需要检查它在关系和注释方面的表现。

3 个答案:

答案 0 :(得分:0)

您可以从您的EER图开始,定义您的应用程序将需要哪些学说实体以及它们之间的关系(注意:如果关系不容易发现,您可能需要一个类图)。然后我建议遵循Symfony明确定位的MVC设计模式:

  • 拥有实体后,您就拥有了模型。
  • 花一点时间来定义您的应用程序将使用哪些路由
  • 处理控制器的最简单方法是为每条路线分配不同的控制器(除非你真的有很多路线)。
  • 最后编写视图以向用户呈现模型和逻辑。

希望这有帮助。

答案 1 :(得分:0)

Ocramius在Doctrine ORM模块(用于Zend Framework)中实现了可视化实体图的工具。可视化图表以配置对象关系真的很有帮助......

我在Zend中喜欢它,并且经常使用它!所以当我开始学习Symfony时,我真的很想念它...我决定找到一种方法来做同样的事情......我做到了! (它使用yuml.me API)

我分享了这个包:

https://packagist.org/packages/onurb/doctrine-yuml-bundle

只需3个步骤即可轻松完成安装......试试吧:)

答案 2 :(得分:0)

我创建了一个非常好的脚本来执行此操作。它将EER图转换为符合symfony的Doctrine 2实体,它允许您完全自定义它的完成方式。

第一步是下载此工具(https://github.com/mysql-workbench-schema-exporter/doctrine2-exporter)。我刚刚通过composer安装它(按照github上的说明)

接下来,.mwb文件与我建议您制作的脚本位于同一目录中。

接下来,我创建了一个这样的脚本来自定义该程序的设置。

<强> autodoctrine.sh

php vendor/bin/mysql-workbench-schema-export youreerdiagram.mwb ./entities << EOF
`#Export to Doctrine Annotation Format`                                     1
`#Would you like to change the setup configuration before exporting`        y
`#Log to console`                                                           y
`#Log file`                                                                 doctrineconvert.log
`#Filename [%entity%.%extension%]`
`#Indentation [4]`
`#Use tabs [no]`
`#Eol delimeter (win, unix) [win]`
`#Backup existing file [yes]`
`#Add generator info as comment [yes]`
`#Skip plural name checking [no]`
`#Use logged storage [no]`
`#Sort tables and views [yes]`
`#Export only table categorized []`
`#Enhance many to many detection [yes]`
`#Skip many to many tables [yes]`
`#Bundle namespace []`
`#Entity namespace []`
`#Repository namespace []`
`#Use automatic repository [yes]`
`#Skip column with relation [no]`
`#Related var name format [%name%%related%]`
`#Nullable attribute (auto, always) [auto]`
`#Generated value strategy (auto, identity, sequence, table, none) [auto]`
`#Default cascade (persist, remove, detach, merge, all, refresh, ) [no]`
`#Use annotation prefix [ORM\]`
`#Skip getter and setter [no]`
`#Generate entity serialization [yes]`
`#Generate extendable entity [no]`                                          y
`#Quote identifier strategy (auto, always, none) [auto]`
`#Extends class []`
`#Property typehint [no]`
EOF

这将为您创建教义实体。我的特定设置启用了可扩展实体,因为这样您可以反复运行此命令而不覆盖特定于模型的代码。您只需将代码放在扩展基类的类中。这将在数​​据库中创建一个您将要忽略的鉴别器列,但它对于逻辑分离是值得的。

接下来,您只需运行/vendor/bin/doctrine orm:schema-tool:create控制台命令,就像在symfony教程中一样,让它从教条文件中创建数据库!让我知道这是否足够清楚。

<强>参考文献:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/tools.html