2010-08-26 2 views
5

Tôi có một cột loại object trong một mô hình. Nhưng nếu tôi tải một mô hình, và thay đổi một thuộc tính của đối tượng, và sau đó lưu lại, nó dường như không sắp xếp lại đối tượng. ví dụ.Học thuyết: Cách đánh dấu giá trị của cột đối tượng là bẩn?

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

Tôi nghĩ rằng đây là bởi vì nó được kiểm tra sửa đổi bằng cách so sánh các giá trị cũ và mới sử dụng !==, mà trả về false vì cả hai đều tham chiếu đến cùng một đối tượng.

Tôi có thể sao chép đối tượng trước khi lưu nhưng rõ ràng phải có cách rõ ràng hơn mà tôi đã bỏ qua.

Trả lời

4

Trạng thái không thay đổi vì bạn không cập nhật trường (chỉ tham chiếu). Nếu bạn quan tâm đến cách nó xảy ra, hãy đọc thiết lập()_set() phương pháp trong Doctrine_Record lớp.

Bạn có thể tự thay đổi trạng thái của một kỷ lục với một nhà nước() phương pháp:

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

này nên buộc tiết kiệm() để giữ lại thay đổi của bạn.