2012-02-06 25 views
5

Đây là định nghĩa bảng của tôi cho lược đồ Propel. Cột modifiedtimestamp loại (DateTime bằng PHP) và tôi muốn chỉ định giá trị mặc định cho bây giờ. Tôi đã thử đặt nó vào "bây giờ" nhưng tôi nhận được một lỗi sử dụng propel-gen insert-sql lệnh:Cách chỉ định defaultValue thành "now" cho cột dấu thời gian trong Propel?

"Syntaxt lỗi hoặc vi phạm truy cập:. 1067 giá trị mặc định không hợp lệ cho 'biến đổi'

có ai biết làm thế nào tôi có thể thiết lập giá trị mặc định cho đến nay cho một cột timestamp trong Propel?

<table name="mashup_setting"> 
    <!-- omitted previous column definition --> 
    <column name="modified" type="timestamp" required="true" defaultValue="now" /> 
</table> 

Trả lời

5

Thay đổi tên thành "updated_at", đó là một lĩnh vực đặc biệt trong Propel đó sẽ tự động được cập nhật để NOW() bất cứ khi nào bạn cập nhật các cánh đồng. "created_at" cũng tương tự và sẽ làm điều tương tự khi đối tượng của bạn được tạo.

Trong mô hình của mình, bạn luôn có thể proxy "đã sửa đổi" hoặc getModified() thành getUpdatedAt() để hoàn thành chức năng của mình.

Nếu bạn phải "sửa đổi" làm tên cho cột của mình, bạn cần viết một hành vi, mà tôi cho rằng bạn cần phải thực hiện nhiều công việc hơn để thực hiện việc này. Bạn có thể tìm thấy thông tin về các hành vi ở đây.

http://www.symfony-project.org/cookbook/1_2/en/behaviors

11

Trong các phiên bản mới hơn Propel bạn có thể chỉ định bạn cột như vậy:

<column name="created" type="TIMESTAMP" defaultExpr="CURRENT_TIMESTAMP" /> 

Đó là sau đó tương thích chéo db.

+0

Đây phải là câu trả lời được chấp nhận vì nó chính xác hơn! – tmuecksch

+0

Đồng ý, điều này là chính xác hơn và phải là câu trả lời được chấp nhận –

2

Các tài liệu tại http://propelorm.org/behaviors/timestampable.html không chỉ định nếu điều này là có sẵn trong 1.6 nhưng thêm video này vào lược đồ và xây dựng:

<behavior name="timestampable" /> 

Mô hình này hiện nay có hai cột mới, created_at và updated_at, dùng để chứa một dấu thời gian tự động được cập nhật khi lưu:

$obj->save(); 
echo $obj->getCreatedAt(); // 2009-10-02 18:14:23 
echo $obj->getUpdatedAt(); // 2009-10-02 18:14:25 
+1

Câu trả lời hay, cảm ơn! –

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