Làm cách nào để tự động thêm datetime trong InstallSchema magento2?


9

trong InstallSchema

        ->addColumn(
            'created_at',
            \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
            [],
            'Creation Time'
        )
        ->addColumn(
            'updated_at',
            \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
            [],
            'Update Time'
        )          

Vậy làm thế nào updated_at, create_attự động thêm datetime khi thực hiện hành động?

Câu trả lời:


23

Câu trả lời được cung cấp bởi @Smartie sẽ hoạt động, nhưng bạn cũng có thể đạt được điều này ở cấp cơ sở dữ liệu như Magento 2 dành cho thực thể khách hàng:

    )->addColumn(
        'created_at',
        \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
        null,
        ['nullable' => false, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT],
        'Created At'
    )->addColumn(
        'updated_at',
        \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
        null,
        ['nullable' => false, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE],
        'Updated At'

Điều này sẽ đặt các cột sau:

`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Created At',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Updated At',

@xanka vui lòng đánh dấu câu trả lời là chấp nhận nếu bạn hài lòng với điều đó.
— Wojtek Naruniec

3

Bạn cần thêm tùy chọn "mặc định" với giá trị \ Magento \ Framework \ DB \ Ddl \ Table :: TIMESTAMP_INIT

->addColumn(
    'created_at',
    \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
    null,
    [
        'nullable' => false, 
        'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT
    ],
    'Created At'
)

2

Chúng được thực hiện trong chính các mô hình. Ví dụ: khi mô hình danh sách mong muốn được lưu, update_at được cập nhật trong hàm beforeSave.

ứng dụng / mã / Magento / Wishlist / Model / Wishlist.php xung quanh dòng 252

 /**
 * Set date of last update for wishlist
 *
 * @return $this
 */
public function beforeSave()
{
    parent::beforeSave();
    $this->setUpdatedAt($this->_date->gmtDate());
    return $this;
}

Bạn cũng có thể thấy một cái gì đó tương tự trong mô hình mục wishlist

ứng dụng / mã / Magento / Wishlist / Model / Item.php

...
public function beforeSave()
{
    ...
    // set current date if added at data is not defined
    if (is_null($this->getAddedAt())) {
        $this->setAddedAt($this->_date->gmtDate());
    }
    ...
}
...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.