1

リレーションを更新する TYPO3 Flow に問題があります。フローは変更された関係を自動的に更新する必要があるので、関連するエンティティをそれぞれのリポジトリで更新する必要はありません。

例 1:
属性「jobs」に複数の「Job」子を持つモデル「Project」があります。私が行った場合:

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

その場合、ジョブは新しいプロジェクト ID で正しく更新されません。

例 2:
モデル "Project" と "Briefing" の間の双方向の 1 対 1 の関係を実現したかったのですが、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はこれを自動的に行うべきではありませんか?

それで、私は本当に各子をそのリポジトリで自分で更新する必要がありますか、それともフローが私のためにこれを行うべきですか?

環境:
- TYPO3 FLOW 2.3.3 (最新の安定版)
- Doctrine 2.3.6
- PHP 5.4.39-0+deb7u2

4

1 に答える 1

1

フローマニュアルから:

オブジェクトをリポジトリに追加またはリポジトリから削除すると、そのオブジェクトは、persistAll で予期されるように、基礎となる永続性に追加または削除されます。しかし、すでに永続化されているオブジェクトへの変更はどうでしょうか? これまで見てきたように、これらの変更は、変更されたオブジェクトが対応するリポジトリで更新するように指定された場合にのみ保持されます。

では、対応するリポジトリを持たないオブジェクトの場合、変更はどのように保持されるのでしょうか? 同じように、トラバーサルによって、それらのオブジェクトを親からフェッチします。TYPO3 フローは、参照されるオブジェクト自体が集約ルートでない限り、すべての永続化操作について、リポジトリ (集約ルート) で管理されるオブジェクトからの参照に従います。

そのため、エンティティのリポジトリがある場合は、更新メソッドを明示的に呼び出す必要があります。これはもともと異なっていましたが、 Flow 1.0 で変更されました

TYPO3 CMS Extbase < 6.2 でも変更されるまでは機能していたので、これは機能するはずだと思うかもしれません。

于 2015-05-20T13:34:12.690 に答える