2010-03-22 26 views
6

Tôi có mô hình Doctrine với trường ngày "date_of_birth" (ngày biểu mẫu của symfony) được điền bởi người dùng tất cả hoạt động 100% nó lưu vào db như mong đợi, tuy nhiên trong mô hình phương thức save() tôi cần lấy giá trị của trường này trước khi lưu xảy ra. Vấn đề của tôi là Khi cố gắng để có được những giá trị ngày tháng nó sẽ trả về chuỗi rỗng nếu nó là một kỷ lục mới và giá trị cũ nếu nó là một kỷ lục hiệnDoctrine date in save override/trước khi lưu

public function save(Doctrine_Connection $conn = null) 
{ 
     $dob = $this->getDateOfBirth(); // returns empty str if new and old value if existing 
     $dob = $this->date_of_birth; //also returns empty str 

     return parent::save($conn); 
} 

Làm thế nào tôi có thể lấy giá trị của lĩnh vực này beore dữ liệu được lưu

Trả lời

7

Trong Học thuyết 1.2 bạn có thể ghi đè lên preSave pseudo-event:

// In your model class 
public function preSave($event) { 
    $dob = $this->getDateOfBirth(); 

    //do whatever you need 

    parent::preSave($event); 
} 

In Doctrine 2.1 the function names changed.

+0

liên kết bị hỏng ...:/ – Carlos

+0

liên kết Ok cố định vào tài liệu hiện hành – Benoit

+0

Cũng Carlos không có nhu cầu để downvote trên tôi vì Giáo lý dự án đã không duy trì liên kết của họ trong suốt những năm (6 và một nửa năm nay) – Benoit

2

Generaly pseudo-sự kiện i n học thuyết sử dụng các giá trị "mới", tuy nhiên có phương thức getModified() và nó thực hiện chính xác những gì bạn cần.

$modifiedFields = $this->getModified(true); 
if(isset($modifiedFields['date_of_birth'])) { //index is available only after change 
    echo $modifiedFields['date_of_birth']; //old value 
} 

more info from doc about getModified()

Các vấn đề liên quan