2010-01-13 14 views

Odpowiedz

23

Proszę nie pobierać ponownie bazy danych! To działa dla Doctrine 1.2, nie testowałem niższych wersji.

// in your model class 
public function preSave($event) { 
    if (!$this->isModified()) 
    return; 

    $modifiedFields = $this->getModified(); 
    if (array_key_exists('title', $modifiedFields)) { 
    // your code 
    } 
} 

Sprawdź także documentation.

-1

Spróbuj tego.

public function preSave($event) 
{ 
    $id = $event->getInvoker()->id; 
    $currentRecord = $this->getTable()->find($id); 

    if ($currentRecord->body != $event->getInvoker()->body) 
    { 
     $event->getEnvoker()->body = $this->_htmlify($event->getEnvoker()->body); 
    } 
} 
+0

Po dodaniu parametru '$ event' do' preSave() 'metoda nie jest w ogóle wykonywana. – takeshin

+0

Którą wersję Doctrine używasz? – Travis

+0

Używam Doctrine 1.2.1 – takeshin

3

Odpowiedź Travisa była prawie poprawna, ponieważ problem polega na tym, że obiekt jest nadpisywany podczas wykonywania zapytania Doctrine. Rozwiązanie:

public function preSave($event) 
{ 
    // Change the attribute to not overwrite the object 
    $oDoctrineManager = Doctrine_Manager::getInstance(); 
    $oDoctrineManager->setAttribute(Doctrine::ATTR_HYDRATE_OVERWRITE, false); 

    $newRecord = $event->getInvoker(); 
    $oldRecord = $this->getTable()->find($id); 

    if ($oldRecord['title'] != $newRecord->title) 
    { 
    ... 
    } 
} 
Powiązane problemy