2017-03-07 7 views
0

私のアプリケーションの日記サービスをセットアップしました。アイデアは、私のコントローラ(工場)にサービスを注入してから、必要に応じてdiaryEntryメソッドを呼び出して、ダイアリーエントリをdBに格納することでした。私が抱えている問題は、コントローラーアクションでメソッドを複数回呼び出すと、dBに最後のエントリしか格納されないということです。問題は2つだけをMSGさZF2 Doctrineサービス - 複数のコール

はdBで救われる

$this->diaryService->diaryEntry($order->getProjectUrn(), 'test msg 1); 
$this->diaryService->diaryEntry($order->getProjectUrn(), 'test msg 2); 
は、MSG 1は

をされていません: - ここにDiaryService :: diaryEntryあるコントローラのアクションでは

public function diaryEntry($projectUrn, $msg, $diaryCategory = 14) 
{ 
    $em    = $this->em; 
    $user   = $this->user; 
    $ProjectDiary = $this->projectDiaryEntity; 
    if(is_numeric($projectUrn)) { 
     $projectUrn = $em->find('Application\Entity\ProjectUrn', $projectUrn); 
    } 
    $ProjectDiary->setProjectUrn($projectUrn); 
    $ProjectDiary->setDiaryCategory($em->find('Application\Entity\DiaryCategory', $diaryCategory)); 
    $ProjectDiary->setStatus(1); 
    $ProjectDiary->setComment($msg); 
    $ProjectDiary->setUser($em->getRepository('Application\Entity\Users')->findOneBy(['username' => $user->username])); 
    $ProjectDiary->setTimestamp(new \DateTime()); 
    $em->persist($ProjectDiary); 
    $em->flush(); 
    return; 
} 

私は、このような何かを持っています保存されました。最後の更新は、diaryEntryメソッドの最後にフラッシュを追加することでしたが、これは違いはありませんでした。誰もがこの問題を解決するために探し始めるアイディアを持っていますか?それは悪いアーキテクチャで、おそらくサービスとして適していないと何か他のものを利用する必要がありますか?

私はアプリ

から必要な任意のさらなるコードを貼り付けて幸せはあなたが$this->projectDiaryEntityが初期化される方法に関する情報を投稿する場合、それはより多くのを助けるだろうが、私はあなたが注入賭けどのような援助

答えて

1

のため事前にありがとうすべての操作は同じオブジェクトで行われます。

は、このいずれかであなたのラインを交換してみてください。 $ProjectDiary = clone $this->projectDiaryEntity;

あなたの方法は、しかし、それはあなたが1つの方法の数行に基づいて変更すべきかを伝えるのは難しいです良い見ていません。

デフォルトのstatus1の場合、エンティティクラスで設定できます。タイムスタンプも同じです。

+0

こんにちはSzymonM、実際に私は工場を通して日記オブジェクトを注入しています。親切に私は受け入れて投票してくれてありがとう。私たちはコントローラーなどでサービスを複製しようとしましたが、実際のサービスでは決して試みませんでした。 – JamesB

+0

**注意:PHPはデフォルトでディープクローンを行いません。つまり、クローンされたエンティティのプロパティが別のエンティティまたはオブジェクトを指している場合、クローンされません。 [この回答](http://stackoverflow.com/questions/14158111/deep-clone-doctrine-entity-with-related-entities)と[このライブラリ](https://github.com)を参照してください。/myclabs/DeepCopy)。 – edigu