2011-10-05 2 views
1

Все мои настройки Doctrine2 выполняются в файлах YAML. У меня есть класс сущностей с именем LoanAppMenuProgress, где я пытаюсь выполнить функцию prePersist. Этот объект LoanAppMenuProgress имеет отношения oneToOne с другим классом с именем LoanApp. Существует ассоциация внешних ключей в таблице LoanAppMenuProgress, связанная с таблицей LoanApp в БД.Doctrine2 lifecycleCallbacks prePersist не запускается с конфигурацией YAML

У меня есть этот конфиг для моего класса LoanAppMenuProgress в LoanApp.LoanAppMenuProgress.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 ] 

Это мой LoanApp.LoanApp.orm.yml файл:

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. 

В моей LoanAppMenuProgress Класс Entity, у меня есть следующий код:

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. "); 
    } 
} 

Следующий код называется wit гин мой LoanAppController класс:

// ... 

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

// ... 

Когда я выполнить код в LoanAppController будет написана на моем экране следующее:

«О упорствовать. Совершено сохраняющиеся «

я пропускаю, что немного в середине, где выход должен прочитать:

». О упорствовать. Внутри updateMainMenuStatus функция prePersist. Done persistent. "

Изменения записываются в базу данных, и все функциональные возможности системы работают должным образом, за исключением prePersist(). Я довольно долго боролся с настройками yml, так что мое первоначальное предположение заключается в том, что моя установка YAML неверна.

В документации (насколько я понял) упоминается, что я должен добавить lifecycleCallbacks: и prePersist: элементы в файл yml, а затем убедитесь, что у меня есть (

У кого-нибудь есть идеи?

Спасибо.

ответ

5

prePersist только вызывается, когда вы выполняете инструкцию типа INSERT. Это событие никогда не будет срабатывать над действием UPDATE. Чтобы выполнить какое-либо действие, когда объект UPDATEd, используйте preUpdate. Обратите внимание, что preUpdate имеет гораздо больше ограничений на то, что может быть выполнено с данным объектом.

Derrick

Смежные вопросы