2010-08-26 7 views
5

Ich habe eine Spalte des Typs object in einem Modell. Wenn ich jedoch ein Modell lade und eine Eigenschaft des Objekts ändere und dann erneut speichere, scheint das Objekt nicht erneut serialisiert zu werden. z.B.Lehre: Wie Objektspaltenwert als schmutzig markiert?

$model_instance = $table->find(1); 
$object = $model_instance->object_column; 
$object->someProp = 'new value'; 
$model_instance->save(); //has no effect 

Ich denke, das liegt daran, dass es für die Änderung ist die Überprüfung durch die alten und neuen Werte mit !== zu vergleichen, was falsch zurückgibt, weil sie beide Referenzen auf das gleiche Objekt sind.

Ich könnte das Objekt vor dem Speichern klonen, aber es muss eindeutig ein offensichtlicher Weg sein, den ich verpasst habe.

Antwort

4

Der Status wird nicht geändert, weil Sie das Feld nicht aktualisieren (nur die Referenz). Wenn Sie interessiert sind, wie es passiert, lesen Sie set() und _set() Methoden in Doctrine_Record Klasse.

Sie können manuell den Zustand eines Datensatzes ändern mit einem Zustand() Methode:

$model_instance->state(Doctrine_Record::STATE_DIRTY); 

Diese save() zwingen, sollten die Änderungen bestehen bleiben.

Verwandte Themen