我已经为我的应用程序设置了日记服务。这个想法是将服务注入到我的控制器(通过工厂),然后根据需要调用diaryEntry方法将日记条目存储到dB中。我遇到的问题是,如果我在控制器操作中多次调用该方法,我只能获取存储在dB中的最后一个条目。这里是DiaryService :: diaryEntry -ZF2主义服务 - 多次呼叫
public function diaryEntry($projectUrn, $msg, $diaryCategory = 14)
{
$em = $this->em;
$user = $this->user;
$ProjectDiary = $this->projectDiaryEntity;
if(is_numeric($projectUrn)) {
$projectUrn = $em->find('Application\Entity\ProjectUrn', $projectUrn);
}
$ProjectDiary->setProjectUrn($projectUrn);
$ProjectDiary->setDiaryCategory($em->find('Application\Entity\DiaryCategory', $diaryCategory));
$ProjectDiary->setStatus(1);
$ProjectDiary->setComment($msg);
$ProjectDiary->setUser($em->getRepository('Application\Entity\Users')->findOneBy(['username' => $user->username]));
$ProjectDiary->setTimestamp(new \DateTime());
$em->persist($ProjectDiary);
$em->flush();
return;
}
在控制器的行动我再有这样的事情:
$this->diaryService->diaryEntry($order->getProjectUrn(), 'test msg 1);
$this->diaryService->diaryEntry($order->getProjectUrn(), 'test msg 2);
问题只味精2得到保存在分贝,味精1没有被保存。最后一次更新是在diaryEntry方法的末尾添加flush,但这没有什么区别。有没有人有任何想法,我coudl开始寻找解决这个问题?这是不好的架构,也许不适合作为服务,应该利用别的东西吗?
我很高兴地粘贴应用
预先感谢您的任何援助所需的任何进一步的代码
嗨SzymonM,确实我通过工厂注入日记对象,你说什么是有道理的,它的工作原理!谢谢你,我已经接受并投了票。我们试图在控制器中克隆服务等,但从来没有在实际服务中使用。 – JamesB
**谨防**:默认情况下,PHP不会进行深度克隆,这意味着如果克隆实体的属性指向另一个实体或对象,则不会被克隆。你可能想看看[这个答案](http://stackoverflow.com/questions/14158111/deep-clone-doctrine-entity-with-related-entities)和[这个库](https://github.com/myclabs/deepcopy的)。 – edigu