我有一个问题TYPO3流更新我的关系。Flow应该自动更新已更改的关系,这样我就不必使用各自的存储库更新相关实体,我说错了吗?
示例1:
我有一个模型"项目"与属性"工作"的多个"工作"的孩子。如果我这样做:
$project->setJobs($collectionOfJobs);
$this->projectRepository->update($project);
则作业没有使用新的project-id正确更新。
示例2:
我想实现"Project"one_answers"Briefing"模型之间的双向一对一关系,发现TYPO3中有一个已知的bug:流动中的双向一对一关系
所以我想通过手动设置另一边的关系来修复它:
class Briefing {
/**
* @param SomePackageDomainModelProject $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
来自Flow手册:
当您向存储库添加或从存储库中删除一个对象时,该对象将按照预期在persistAll上从底层持久性中添加或删除。但是,如果对已经持久化的对象进行更改呢?正如我们所看到的,只有当更改的对象在相应的存储库上更新时,这些更改才会被持久化。
现在,对于没有相应存储库的对象,如何持久化更改?以同样的方式从它们的父对象中获取这些对象——通过遍历。对于所有持久性操作,TYPO3 Flow遵循来自存储库中管理的对象(聚合根)的引用,除非引用的对象本身是聚合根。
因此,如果您的实体有存储库,则必须显式调用update方法。这在最初是不同的,但是在Flow 1.0中改变了。
也许你认为这应该工作,因为它在TYPO3 CMS Extbase <</p>