typo3流程持续更新关系

时间:2015-05-20 11:10:05

标签: doctrine-orm flow-framework

我有一个问题TYPO3 Flow更新我的关系。 我错了,Flow应该自动更新已更改的关系,所以我不必用相应的存储库更新相关实体吗?

示例1:
我有一个模型“项目”,在属性“作业”上有多个“作业”子项。 如果我这样做:

$project->setJobs($collectionOfJobs);
$this->projectRepository->update($project);

然后使用新项目ID正确更新作业。

示例2:
我想实现模型“Project”和“Briefing”之间的双向一对一关系,并发现TYPO3中存在一个已知错误: Bidirectional One-To-One Relationships in Flow

所以我想通过手动设置关系来解决它:

class Briefing {    

 /**
  * @param \Some\Package\Domain\Model\Project $project
  * @return void
  */
 public function setProject($project) {
   $this->project = $project;
   $this->project->setBriefing($this);
   $this->projectRepository->update($this->project); // FIXME: Bug? Flow should do this
 }

但我必须自己更新与其存储库的关系。 Flow不应该自动执行此操作吗?

所以我真的需要自己更新每个孩子的存储库,或者Flow应该为我做这个吗?

环境:
    - TYPO3 FLOW 2.3.3(最新稳定)
    - 学说2.3.6
    - PHP 5.4.39-0 + deb7u2

1 个答案:

答案 0 :(得分:1)

来自Flow manual

  

当您向存储库添加对象或从存储库移除对象时,该对象将在persistAll上按预期添加到基础持久性或从基础持久性中删除。但是对已经存在的对象的更改呢?正如我们所看到的,如果更改的对象在相应的存储库上更新,那么这些更改只会保留。

     

现在,对于没有相应存储库的对象,更改如何保持不变?以同样的方式从父对象中获取这些对象 - 通过遍历。除非引用的对象本身是聚合根,否则TYPO3 Flow遵循所有持久性操作在存储库(聚合根)中管理的对象的引用。

因此,如果您的实体有存储库,则必须明确调用update方法。这最初是不同的,但changed for Flow 1.0

也许您认为这应该有效,因为它适用于TYPO3 CMS Extbase< 6.2直到changed there为止。