2011-10-05 1 views
1

すべてのDoctrine2設定はYAMLファイル内で行われます。私は、prePersist関数を実行しようとしているLoanAppMenuProgressという名前のエンティティクラスを持っています。このLoanAppMenuProgressエンティティには、LoanAppという別のクラスとのoneToOne関係があります。 DBのLoanAppテーブルに関連付けられたLoanAppMenuProgressテーブルには、外部キーの関連付けがあります。Doctrine2 lifecycleCallbacks prePersistがYAML設定で起動しない

私はLoanApp.LoanAppMenuProgress.orm.ymlで私LoanAppMenuProgressクラスのために、この設定を持っている:私のLoanAppMenuProgressで

LoanEv\LoanAppBundle\Entity\LoanApp\LoanApp: 
    type: entity 
    repositoryClass: LoanEv\LoanAppBundle\Repository\LoanApp\LoanAppRepository 
    table: loan_app 
    id: 
    id: 
     type: integer 
     generator: { strategy: auto } 

## This is the INVERSE side of the relationship. 
    oneToOne: 
    loanapp_menu: 
     targetEntity: LoanAppMenuProgress 
     mappedBy: loan_app 

    fields: 
    bank_id: 
     type: integer 
    # etc. 

:これは私のLoanApp.LoanApp.orm.ymlファイルは

LoanEv\LoanAppBundle\Entity\LoanApp\LoanAppMenuProgress: 
    type: entity 
    repositoryClass: LoanEv\LoanAppBundle\Repository\LoanApp\LoanAppMenuProgress 
    table: loan_app_menu_progress 
    id: 
    id: 
     type: integer 
     generator: { strategy: auto } 

### This is the OWNING side of the relationship 
    oneToOne: 
    loan_app: 
     targetEntity: LoanApp 
     inversedBy: loanapp_menu 
     joinColumn: 
     name: loan_id 
     referencedColumnName: id 

    fields: 
    loan_id: 
     type: integer 
    menu_id2: 
     type: integer 
    menu_id3: 
     type: integer 
    menu_id4: 
     type: integer 

    lifecycleCallbacks: 
    prePersist: [ updateMainMenuStatus ] 

ですエンティティクラス、私は次のコードを持っています:

namespace LoanEv\LoanAppBundle\Entity\LoanApp; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Util\Debug; 

/** 
* LoanEv\LoanAppBundle\Entity\LoanApp\LoanAppMenuProgress 
*/ 
class LoanAppMenuProgress 
{ 
    private $id; 

    private $loan_id; 

    /** 
    * @var LoanEv\LoanAppBundle\Entity\LoanApp\LoanApp 
    */ 
    private $loan_app; 

    private $menu_id2 = 0; 

    private $menu_id3 = 0; 

    private $menu_id4 = 0; 

    // ... 

    public function updateMainMenuStatus() 
    {  
     echo("Inside prePersist's updateMainMenuStatus function. "); 
    } 
} 

次のコードはウィット私は画面に書き込まれます、次のLoanAppControllerでコードを実行すると

// ... 

//Save the menuStatus changes. 
echo("About to persist. "); 
    $em->persist($menuStatus[0]); 
echo("Done persisting."); 
    $em->flush(); 

// ... 

:持続する

「について私のLoanAppControllerクラスをホアヒン。 Doneを持続する「

を私は出力が読むべき途中でそのビットが欠落しています:

」。持続しようとしています。 prePersistのupdateMainMenuStatus関数の内部にあります。完了しました」

変更がデータベースに書き込まれ、システムのすべての機能がprePersist()を除いて期待通りに機能しています。かなり長い間yml設定で苦労しました。

ドキュメントには、lifecycleCallbacks:とprePersist:itemsをymlファイルに追加してから、私が使用していることを確認する必要があることが書かれています。

誰もがアイデアを持っていますか?

ありがとうございます。

答えて

5

prePersistは、INSERTタイプのステートメントを実行するときにのみ呼び出されます。このイベントは、UPDATEアクションでは発生しません。 エンティティが更新されているときに何らかのアクションを実行するには、preUpdateを使用します。注目すべきは、preUpdateには、問題のエンティティで何が実行できるかにはるかに多くの制限があることに注意してください。

デリック

関連する問題