如何在Symfony2中简化持久化?

问题描述

| 我目前正在玩Symfony2,到目前为止非常喜欢。尽管出现了一个问题,但我想知道最佳实践是什么。 如果我想保留一个实体,我必须这样:
<?php
$myEntity = new Entity();
$myEntity->setSomeData(\'just an example\');
$em = $this->get(\'doctrine\')->getEntityManager();
$em->persist($myEntity);
$em->flush();
似乎需要反复编写很多代码。我更喜欢这样的事情:
<?php
$myEntity = new Entity();
$myEntity->setSomeData(\'just an example\');
$myEntity->persist();
但是,根据我如何获得实体经理的经验,这似乎并不是最佳实践。那我该怎么办?关于如何处理的任何提示?     

解决方法

        这是保持适当的关注点分离的标准方法。实体不应该知道持久层。 如果您确实拥有创建和持久化新实体的代码,那么可以轻松地在控制器类上添加一个快捷方式persistAndFlush方法。     ,        另外,不要忘记flush方法实际上是在更新数据库上的更改。这意味着,如果您需要持久保留多个实体,则最好在每个持久操作结束时进行一次刷新。 假设您有三个实体:
$entity1
$entity2
$entity3
。那么此代码不是最佳的:
$em->persist($entity1);
$em->flush();

$em->persist($entity2);
$em->flush();

$em->persist($entity3);
$em->flush();
这段代码会更好地执行,因为它将只同步数据库一次:
$em->persist($entity1);
$em->persist($entity2);
$em->persist($entity3);

$em->flush();
因此,应谨慎使用控制器中的快捷键(例如ѭ7),因为在需要保留多个实体时效率不高。这在“ Doctrine2”文档中有所说明(在第3/4页)。这里的文字摘自官方2.0文档:   在对实体进行的每次更改或对persist / remove / merge / ...的每次单次调用之后,都不要调用flush。这是一种反模式,不必要地降低了应用程序的性能。取而代之的是,对对象进行操作的表单工作单元,并在完成后调用冲洗。在处理单个HTTP请求时,通常不应调用刷新次数超过0-2次。 问候, 马特     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...