如何在Symfony2中正确保留模型?

时间:2011-12-18 07:18:01

标签: php symfony doctrine-orm

我对Symfony2中模型(实体)持久性的概念感到非常困惑。 AFAIK,Symfony2中没有类似于model_instance-> save()的东西。相反,它必须通过检索doctrine实体管理器在控制器中调用,然后保持model_instance并刷新model_instance。

  • 如果我有一个Blog模型,它包含变量Tag模型实例和Category模型实例,它们将从博客邮件正文中生成。但是,我不知道如何创建一个博客工厂来保存这些标签和类别,而我必须从工厂返回这些“标签”和“类别”实例(无论如何它都不会存在)---那里我无法坚持博客并将标签和类别全部保存在博客中的单一方法中。

事实上,如果我想编写一个定期调用以保持模型的脚本,这似乎是不可能的,因为它必须调用控制器,但我不明白为什么脚本需要Web服务器存在,但不仅仅是在不触及Web服务器的情况下处理对象模型。

我真的很感激如何解决上述问题。谢谢!

2 个答案:

答案 0 :(得分:3)

你是对的,Doctrine2是DataMapper模式的实现。因此,这些概念与Doctrine1和Propel等其他ORM实现的ActiveRecord不同。

默认情况下,当您创建具有某种关系的实体时,您必须手动将主要实体保持为关系。但是你可以改变这种激活持久性级联的行为:

http://www.doctrine-project.org/docs/orm/2.1/en/reference/working-with-associations.html#transitive-persistence-cascade-operations

答案 1 :(得分:2)

在你的评论中,你提到了测试。这里有一个关于测试学说的食谱库:http://symfony.com/doc/current/cookbook/testing/doctrine.html

Symfony2实际上是一个解耦的库。虽然使用doctrine的默认方式是通过控制器,但您可以直接加载doctrine库。我不确定你是如何自己访问教条包的,但我确信上面文章中的例子对此有帮助。

此外,Fabien Potencier(symfony的首席开发人员)最近发表了一篇关于Symfony是一堆可以独立使用的捆绑包的演讲。他介绍了如何使用大部分捆绑包的基础知识。您可以在此处查看:http://symfony.com/video/Paris2011/583