我目前正在学习如何使用symfony2框架。
通过cook book,我开始基本了解一切如何融合在一起。
但是,我有两个关于实体的问题,我认为它们是MVC模式中的模型:
在文档中,似乎有很多关于使用doctrine作为ORM的实体的讨论。如果我有一个不需要任何ORM的实体/模型,这仍然被认为是“实体”吗?
在我看过的大多数教程中,实体通常都被扔进应用程序包下的一个名为“实体”的文件夹中。对于应用程序中的许多实体,我觉得这可能变得非常混乱和无组织。我如何分组和组织实体?
干杯:)
答案 0 :(得分:4)
实体是存储在关系数据库中的模型。文档是存储在文档数据库(例如MongoDB)中的模型。
如果你不想根据你正在使用的存储类型将模型弯曲到特定的命名空间,这就是我的建议。为您的模型类创建Model
命名空间。如果选择使用关系数据库,则可以扩展模型类并将其放入Entity
命名空间,从而在外部文件中提供映射信息。如果您以后决定转移到文档数据库,则执行相同操作,但使用Document
命名空间。
有关此想法的一个很好的例子,请参阅FOSUserBundle。
答案 1 :(得分:3)
关于如何组织模型类的问题:
您可以将子文件夹添加到“Entity”文件夹,然后只需遵循命名空间定义中的结构,如:
<?php
namespace Acme\SampleBundle\Entity\Subfolder\EntityClass
关于你的问题,没有orm工作:这很简单,只是不要使用它。 你的课程就像“普通”课一样......
但是你需要某种接口,比如Doctrine2中的EntityManager。
我总是更喜欢使用ORM / ODM ..
那种情况我只想在你的实体类中添加一个简单的方法:
<?php
public function sendByEmail() {
// Do stuff
}
你根本不需要坚持(保存到DB)的东西。请注意,在symfony1.4中,实体上有一个save()
方法。在Symfony2中,内容通过$entityManager->persist($entity);
答案 2 :(得分:0)
当你告诉你有一个不需要任何ORM的实体/模型时,你的意思是:
如果这是第一种情况,您可以根据需要进行管理,但使用ORM是一种很好的做法。
如果这是第二种情况(正如我所假设的那样),你仍然可以更好地制作实体类。只是在课程中以不同方式链接到您的数据。您可以搜索到文件,而不是查询数据库。
通过这样做,您可以保留最佳实践,如果有一天您想切换到数据库模型,您只需要更改这些类。
要回答你的第二个问题,我有50多个实体模型,这并不会造成混乱。在Entities类中,我告诉用户在哪里找到实体关系模型,所以这很清楚。
这对你有帮助吗?