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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.