如何在batchInsert()中实现TimestampBehavior?

时间:2016-10-07 08:00:25

标签: php yii2

当我使用batchInsert()插入多个记录时,我遇到了问题。

Yii::$app->db->createCommand()->batchInsert($this->model->tableName(), $columns, $rows)->execute()

我在BaseModel中实现了TimestampBehavior

/**
 * @inheritdoc
 */
public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'createdAt',
            'updatedAtAttribute' => 'updatedAt'
        ]
    ];
}

但是当我执行时它不起作用?

2 个答案:

答案 0 :(得分:0)

此行为附加到ActiveRecord并在其生命周期中执行,而batchInsert执行原始SQL查询,因此您无法在那里使用它。

您可以生成此列值。

'createdAt''updatedAt'添加到$columns 对于$rows中的每一行,添加time()作为createdAtupdatedAt列的值。

这只是用当前的unix时间戳填充这些列。

答案 1 :(得分:0)

Yii行为是与Active Record直接相关的功能。

Active RecordQuery Builder(通过调用Yii::$app->db->createCommand()获得)基本不同。它们是处理数据库中记录的两种不同方式。

因此,对您的问题最简单的答案是,在使用查询生成器时,您无法使用Yii行为。