使用Yii2中的AttributeBehavior将可读日期转换为mysql日期

时间:2016-08-28 00:23:12

标签: yii2

尝试将格式为M d, yyyy的日期转换为Y-m-d保存到数据库,以便设置我的行为:

    public function behaviors() {
        return [
            [
                'class'      => AttributeBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => [ 'date_available' ],
                    ActiveRecord::EVENT_BEFORE_UPDATE => [ 'date_available' ],
                ],
                'value'      => function ( $event ) {
                    return date( 'Y-m-d', strtotime( $this->date_available ) );
                },
            ],
        ]
   }

但是在保存时,数据库字段是0000-00-00。如果我在actionUpdate中执行此操作:

$model->date_available = date( 'Y-m-d', strtotime( $model->date_available ) );

一切正常

2 个答案:

答案 0 :(得分:2)

以下是Yii2 2.0.10上的一个工作示例

使用behavior方法添加模型类。如果日期以mm / dd / yyyy返回到mm-dd-yyyy,则请注意字符串转换,然后转换为DB日期格式并保存。

public function behaviors() {
        return [
            [
                'class'      => AttributeBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['start_date'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => ['start_date'],
                ],
                'value' => function ($event) {
                    return date('Y-m-d', strtotime($this->start_date));
                },
            ],
            [
                'class'      => AttributeBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['stop_date'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => ['stop_date'],
                ],
                'value' => function ($event) {
                    return date('Y-m-d', strtotime($this->stop_date));
                },
            ],
        ];
   }

答案 1 :(得分:0)

在行为中,$ this-> date_available为empty.in $ value,您不能使用$ this-> date_available。