1

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

示例 1:
我有一个模型“Project”,在属性“jobs”上有多个“Job”子项。如果我做:

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

那么作业不会使用新的项目 ID 正确更新。

示例 2:
我想实现模型“Project”和“Briefing”之间的双向一对一关系,结果发现 TYPO3 中有一个已知错误: 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(最新稳定版)
- Doctrine 2.3.6
- PHP 5.4.39-0+deb7u2

4

1 回答 1

1

流程手册

当您在存储库中添加或删除对象时,该对象将被添加到底层持久性中或从底层持久性中删除,正如persistAll 所期望的那样。但是对已经持久化的对象的更改呢?正如我们所看到的,只有在更改的对象被提供给相应的存储库更新时,这些更改才会被持久化。

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

因此,如果您的实体有存储库,则必须显式调用更新方法。这最初是不同的,但在 Flow 1.0 中发生了变化

也许你认为这应该可以工作,因为它在 TYPO3 CMS Extbase < 6.2 中也可以工作,直到它也被更改

于 2015-05-20T13:34:12.690 回答