php - Doctrine2 - 注释与 yml/xml

标签 php orm doctrine-orm

在 Doctrine2 中实体描述的注解有什么优点?

在 Doctrine1 & Propel(我用过很多次)中,对数据库进行逆向工程以创建 yml 或 xml,然后生成模型是一个非常快速的工作流程。

在 Doctrine2 中,选择注解,必须编写大量样板代码才能使实体就位。然而注释似乎是“要走的路”。

我错过了什么?

最佳答案

您从 D1 和 propel 描述的工作流程与 Doctrine2 的首选思维方式完全相反。事实上,我也避免在 D1 中编写自己的数据库定义,原因与我在此处给出的大致相同:

在 Doctrine 2 中,您首先关心的是您的实体。实体只是普通的 PHP 对象,而 doctrine 只是处理你的持久性。事实上,Doctrine 在幕后将数据存储在某些数据库中,这实际上是事后才想到的。所有这些困惑正是你应该抽象出来的!理论上,您可以在将来的某个日期摆脱教条,并编写自己的持久性逻辑。您的实体仍会像往常一样工作。

从这个角度来看,从数​​据库模式开始是彻头彻尾的愚蠢。您对您的实体以及嵌入其中和围绕它们的业务逻辑更感兴趣。这汤真香!

现在,由于您正在使用原则来实现实体的持久化,因此(可能)将您的映射数据与类定义放在一起是有意义的。

因此您的新工作流程是:

  1. 通过定义一些普通的 PHP 类来设计一些实体。
  2. 用一些花哨的教义注释标记类定义 咀嚼。
  3. ./doctrine orm:schema:create 并让 doctrine 担心 数据库表定义。

现在,如果您有一些遗留数据库,事情就会变得更加棘手,而且乐趣也会少很多。我还没有真正用 D2 处理过这种情况,但我认为它很丑陋。

关于样板代码:我看到人们提示必须为他们的实体编写 getter/setter。我做了类似的事情 what this guy does - 我所有的实体都扩展了一个 AbstractEntity 类,它使用魔术方法为没有手工制作的任何属性生成 getter/setter。一旦你这样做了,几乎就没有样板了。

或者,现在有很多工具可以为您消除样板文件(PHPStorm 可以做到这一点,Sublime 的插件等)。这使得样板程序相当轻松,并且具有额外的优势,您可以添加类型提示,并且您的编辑器可以提供有用的自动完成。

关于php - Doctrine2 - 注释与 yml/xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001114/

相关文章:

php - array_push 后数组为空

java - 如何编写此 JPQL 查询?

symfony - sonata_type_collection 字段仅适用于现有的父对象

file-upload - Symfony2 : Edit file upload

session - php-fpm 和 nginx session 问题

php - 获取数据库的前 3 个计数

php - 将 PHP 数组嵌套到 json

php - 使用 Redbean PHP ORM 时,是否必须在每个脚本中调用 R::freeze() ?

java - JPA直接返回query.getSingleResult()时返回null

mongodb - 是否可以在 Doctrine 2 ODM 中的多个字段上使用 sort() ?