使用Yii2 TimestampBehavior返回'created_at'没有默认值错误

时间:2018-08-21 11:41:57

标签: yii2

尝试使用Yii2 TimestampBehavior,但是在保存时会返回doesn't have default value错误。

规则中不需要这些值。 DB列是INT(11)。 由于需要保存几行,因此我使用batchInsert()

当我使用time()添加一个值时,它将所有内容保存到数据库中。

public function behaviors()
{
  return [
       'timestamp' => [
           'class' => TimestampBehavior::className(),
           'attributes' => [
               ActiveRecord::EVENT_BEFORE_INSERT => 'created_at',
               ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at',
           ],
           'value' => new Expression('NOW()'),
       ],
       'blameable' => [
           'class' => BlameableBehavior::className(),
           'createdByAttribute' => 'created_by',
           'updatedByAttribute' => 'updated_by',
        ],
   ];
}

Yii::$app->db->createCommand()->batchInsert( 'table_cms',
     [
        //all fields but not the timestamps
     ],
     [
        //rows here
     ])
     ->execute();

1 个答案:

答案 0 :(得分:0)

batchInsert()不支持ActiveRecord功能,因此TimestampBehavior在这里无效。如果您致电TimestampBehavior,将使用save()。在您的情况下,您需要手动传递时间戳。

doesn't have default value可能意味着您正在严格模式下使用MySQL-如果您尝试添加记录而不指定所有没有默认值的字段,它将警告您。