spr*_*ain 6 php persist symfony
我目前正在玩Symfony2,到目前为止非常喜欢它.虽然出现了一个问题,但我想知道最佳做法是什么.
如果我想坚持一个实体,我必须这样:
<?php
$myEntity = new Entity();
$myEntity->setSomeData('just an example');
$em = $this->get('doctrine')->getEntityManager();
$em->persist($myEntity);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
这看起来像是一大堆要一遍又一遍地完成的代码.我更喜欢的是这样的:
<?php
$myEntity = new Entity();
$myEntity->setSomeData('just an example');
$myEntity->persist();
Run Code Online (Sandbox Code Playgroud)
但是,根据我必须获得实体经理的方式,这似乎与最佳实践相去甚远.那我该怎么办?有关如何处理它的任何提示?
Sel*_*aek 11
这是保持适当的关注点分离的标准方法.实体不应该知道持久层.
你可以轻松做的是在你的控制器类上添加一个快捷方式persistAndFlush方法,如果你真的有那么多代码创建和持久化新实体.
另外,不要忘记flush方法实际上是在更新数据库上的更改.这意味着如果您需要持久保存多个实体,最好在每个持久化操作结束时执行一次刷新.
假设你有三个实体:$entity1,$entity2和$entity3.那么这段代码不是最优的:
$em->persist($entity1);
$em->flush();
$em->persist($entity2);
$em->flush();
$em->persist($entity3);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
此代码执行得更好,因为它只会同步您的数据库一次:
$em->persist($entity1);
$em->persist($entity2);
$em->persist($entity3);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
因此,persistAndFlush应该谨慎使用控制器中的快捷方式,因为当您需要持久保存多个实体时效率不高.这说明这里的Doctrine2文档(在页面的3/4)英寸 这里的文字取自官方2.0文档:
每次更改实体或每次调用persist/remove/merge /后都不要调用flush.这是一种反模式,会不必要地降低应用程序的性能.相反,形成对您的对象进行操作的工作单元,并在完成后调用flush.在提供单个HTTP请求时,通常不需要调用刷新次数超过0-2次.
问候,马特
| 归档时间: |
|
| 查看次数: |
3586 次 |
| 最近记录: |