Symfony2 / Doctrine中的实体和模型有啥区别

Posted

技术标签:

【中文标题】Symfony2 / Doctrine中的实体和模型有啥区别【英文标题】:What is the difference between Entity and Model in Symfony2 / DoctrineSymfony2 / Doctrine中的实体和模型有什么区别 【发布时间】:2012-07-11 17:25:58 【问题描述】:

我正在浏览 FOSUserBundle。

我想了解Model/User.phpEntity/User.php 之间的区别。

Model和Entity不能一样吗?

【问题讨论】:

【参考方案1】:

这里是 best summary,关于教义 2 的角色和术语。

实体被 Doctrine 2.0 ORM(以及 Java 世界的 Hibernate)中的 UnitOfWork 模式使用,也是现实世界中事物的对象表示。它具有与记录相同的属性和方法,但它不知道它的持久性。它基本上是一个 POPO(普通的旧 PHP 对象)。这使得这些类和对象非常轻量级。

模型是事物的概念对象表示。该术语可用于上述所有内容。记录是模型,就像实体或文档一样。该术语描述了事物的对象表示。

因此,如果您想创建一个包含一些模型的包,并且希望您的包独立于任何持久层,您将创建定义该事物的模型类和接口。

您将在其中定义和/或实现不特定于任何持久性实现的所有内容,并且您将通过委托使用相关实体或文档类来处理特定内容。

这是例如在定义用户模型的 FOSUserBundle 中完成的。这个用户模型在整个包中使用,但没有完整的实现来访问它自己的数据(我没有看,但我认为它可能只是一个接口)。 最终实现在一个实体类中完成,另一个在文档类中完成,因此无论您使用 MySQL 还是 MongoDB,您仍然可以使用相同的 User 模型您可以甚至在不更改代码的情况下从一个切换到另一个,因为它始终使用独立于实体或文档的模型。

【讨论】:

以上是关于Symfony2 / Doctrine中的实体和模型有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2/Doctrine:如何从实体类中持久化一个实体?

Symfony2/Doctrine - 与普通 SQL 相关的实体抽象

Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误

在 Doctrine (symfony2) 中对可翻译实体进行版本控制

Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行

Symfony2 - 具有一对一关系的 Doctrine Save 实体