Ai đó có thể cho tôi biết cách thêm giá trị mặc định vào cột datetime? Tôi không thể thực hiện việc này như sau:Học thuyết 2.1 - giá trị mặc định của cột ngày giờ
protected $registration_date = date("Y-m-d H:i:s", time());
Vậy làm cách nào?
Ai đó có thể cho tôi biết cách thêm giá trị mặc định vào cột datetime? Tôi không thể thực hiện việc này như sau:Học thuyết 2.1 - giá trị mặc định của cột ngày giờ
protected $registration_date = date("Y-m-d H:i:s", time());
Vậy làm cách nào?
Bạn lập bản đồ tài sản của bạn như loại DateTime sau đó thiết lập các giá trị trong các nhà xây dựng sử dụng một đối tượng DateTime mới:
/**
* @Entity
* @Table(name="...")
*/
class MyEntity
{
/** @Column(type="datetime") */
protected $registration_date;
public function __construct()
{
$this->registration_date = new DateTime();
}
}
này hoạt động như các nhà xây dựng của một lớp tiếp tục tồn tại không được kêu gọi hydrat hóa.
Bạn cũng có thể sử dụng callbacks vòng đời nếu bạn muốn trở thành rất chính xác:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\HasLifecycleCallbacks
* ...
*/
class MyEntity
{
/**
* @ORM\PrePersist
*/
public function onPrePersistSetRegistrationDate()
{
$this->registration_date = new \DateTime();
}
}
Tôi thích câu trả lời này vì nó làm cho nó rõ ràng hơn như thế nào Doctrine sẽ xử lý nó. –
+1 Nó sẽ đặt ngày mới nhất trong hồ sơ. Nếu bản ghi có hai ngày modified_datetime và created_datetime. Nếu bạn đặt modified_datetime trong hàm tạo, thì hàm created_time có thể mới hơn modified_datetime. –
Để tham khảo về tất cả các khả năng của cuộc gọi lại vòng đời: http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#reference-events-lifecycle-events – fyrye
Có một phần mở rộng cho tự động hoá này này ...
https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/timestampable.md
/**
* @var \DateTime
*
* @ORM\Column(name="date_added", type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $date_added;
/**
* @var \DateTime
*
* @ORM\Column(name="date_modified", type="datetime")
* @Gedmo\Timestampable(on="update")
*/
private $date_modified;
Đối với mặc định giá trị CURRENT_TIMESTAMP:
@ORM\Column(name="created_at", type="datetime", options={"default": 0})
.210
Làm việc đối với tôi ...
Đây phải là câu trả lời hàng đầu hiện nay IMO, đặc biệt nếu bạn muốn chính lược đồ bảng giả sử CURRENT_TIMESTAMP – skrilled
Cảm ơn. Điều này đã giúp tôi rất nhiều. Tôi đã sử dụng 'options = {" default ":" CURRENT_TIMESTAMP "})' trước đó thường hoạt động tốt. Nhưng với db postgres của tôi đằng sau nó nó đã chuyển thành DEFAULT NOW() là cách postgres. Nhưng sau đó một học thuyết: di cư: diff sẽ hiểu sai() là một độ lệch từ CURRENT_TIMESTAMP và tạo một tệp khác mỗi khi tôi chạy nó. Nhưng với học thuyết giải pháp này, mọi thứ được đồng bộ. – luba
Câu trả lời hay và IMO, cách sạch nhất để làm điều này. Nếu đó là bất kỳ sự quan tâm nào thì điều này đã được dịch là 'ADD date_added TIMESTAMP (0) KHÔNG CÓ MÃI THỜI GIAN DEFAULT CURRENT_TIMESTAMP NOT NULL' cho tôi. – crmpicco
Tôi nghĩ rằng, cách tốt nhất để thực hiện tự động điền cho datetime
là làm như thế:
* @ORM\Column(type="datetime", options={"default"="CURRENT_TIMESTAMP"})
Đưa logic để xây dựng không phải là giải pháp đúng, bởi vì thiết lập mặc định các giá trị là Trách nhiệm của khách hàng SQL. Nếu bạn quyết định không sử dụng ORM nữa - bạn sẽ mất logic nghiệp vụ. Ngoài ra, nếu sử dụng hàm tạo, bạn sẽ không thể thêm dấu thời gian mặc định cho các thuộc tính datetime
cho các hàng hiện tại.
cảm ơn bạn: D Câu trả lời hay nhất – julestruong
Điều này không hiệu quả trong học thuyết 2.5. – magnetik
Như đã đề cập bên dưới '" mặc định ": 0' hoạt động tốt hơn với việc di chuyển học thuyết. – luba
Tôi bỏ phiếu cho câu trả lời này vì đó là giải pháp PHP thuần túy. Câu trả lời khác có thể: 1) cần kiến thức đặc biệt 'onPrePersistSetRegistrationDate' thêm' HasLifecycleCallbacks', 'PrePersist' chú thích 2) Tôi muốn thiết lập một giá trị mặc định cần tôi thêm thư viện thứ 3' @Gedmo \ Timestampable'? !! 3) CURRENT_TIMESTAMP đôi khi không tốt. Ví dụ: khi máy chủ tập lệnh của bạn ở Trung Quốc nhưng máy chủ cơ sở dữ liệu ở Hoa Kỳ. (nguyên nhân, nó không phải là rất phổ biến, nhưng có những trường hợp như vậy) – Yarco