2010-08-26 3 views
5

Ho una colonna di tipo object in un modello. Ma se carico un modello, e cambio una proprietà dell'oggetto, e poi ri-salva, non sembra ri-serializzare l'oggetto. per esempio.Doctrine: come contrassegnare il valore della colonna dell'oggetto come sporco?

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

penso che questo è perché sta verificando per la modifica confrontando i vecchi e nuovi valori utilizzando !==, che restituisce falso, perché sono entrambi i riferimenti allo stesso oggetto.

Potrei clonare l'oggetto prima di salvare ma chiaramente deve esserci un modo più ovvio che mi è sfuggito.

risposta

4

Lo stato non è stato modificato perché non si aggiorna il campo (solo il riferimento). Se sei interessato a come succede leggi set() e _set() metodi in Doctrine_Record class.

È possibile modificare manualmente lo stato di un record con un metodo distato():

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

Questo dovrebbe forzare save() a persistere le modifiche.