2017-07-12 6 views
2

を追加し、私はTYPO3のバージョンを持っている7.6.18TYPO3 repository->作品ではない

$newMessage = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Istar\\Femessages\\Domain\\Model\\Message'); 
       $newMessage->setUserFrom($myUid); 
       $newMessage->setUserTo($userTo); 
       $newMessage->setChainUid($messageChainUid); 
       $newMessage->setMessage($message); 
       $this->messageRepository->add($newMessage); 
       $persistenceManager = $this->objectManager->get("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager"); 
       $persistenceManager->persistAll(); 

リポジトリは、なぜ、私にしてください知らせる

  $persistenceManager = $this->objectManager->get("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager"); 
      $persistenceManager->persistAll(); 

せずにDBへの新しいを追加does't?

答えて

2

Extbaseの永続性マネージャが起動します。要求が完了し、ビューをレンダリングして要求に応答すると、処理が完了します。これは設計上の理由で、実際にリポジトリに保存するのではなく、リポジトリに格納しているオブジェクトを更新または挿入するだけで保存する理由です。

このアプローチは、実際に必要なときにデータをロードするだけの遅延読み込みと関係があります。あなたのオブジェクトを見て、あなたがそれらを要求すると、リポジトリはあなたを戻します。 xDebugのようなデバッガで結果を調べると、結果に実際に要求されたオブジェクトが含まれていないことに気づくでしょう。これはクエリの単なる表現です。このQueryResultオブジェクトでtoArrayと呼んだ場合、必要な場合にのみデータが取得されます。

データの永続性についても同じことが行われます。システムでは、すぐにデータを保持する必要はないと想定しているため、要求のすべての処理が完了するまでデータをデータベースに送信して待機します。このようにして、少ないデータベース接続でデータを組み込むことができ、これにより時間を節約できます。

オブジェクトを追加した後にオブジェクトを永続化する必要がある場合は、説明したようにPersistenceManagerを呼び出す必要があります。新しい、まだ存在していないオブジェクトへのリンクを生成したい場合は、これが可能です。

persistAllメソッドは、その実行ポイントまですべてのリポジトリに与えられたすべてのオブジェクトに対するすべての変更をすべて保持していることを覚えておいてください。私が知っている限り、少なくとも1つの特定のオブジェクトを永続させる方法はありません。

関連する問題