2016-10-07 2 views
0

複数のレコードを挿入するためにbatchInsert()を使用すると問題が発生します。batchInsert()でTimestampBehaviorを実装する方法は?

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

そして私は私のBaseModel

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

でTimestampBehaviorを実施している。しかし、私は、その後、実行時にそれが動作していないのですか?

+0

「それは機能していません」もう少し具体性があれば大丈夫です。 – BVengerov

+0

関連[質問](http://stackoverflow.com/questions/39600150/yii2-batch-insert-with-activerecord)も参照してください。 – arogachev

答えて

0

この動作はActiveRecordに関連付けられており、そのライフサイクルで実行され、batchInsertは生のSQLクエリを実行しているため、そこでは使用できません。

この列の値を生成することはできますが、

'createdAt'および'updatedAt'から$columnsを追加します。
$rowsの各行について、createdAtupdatedAtの値としてtime()を追加します。

これは、これらの列を現在のunixタイムスタンプで単純に埋め込みます。

0

Yiiビヘイビアは、Active Recordに直接関連する機能です。

Active Recordは、基本的にQuery Builder(これはYii::$app->db->createCommand()となります)とは異なります。これらは、データベース内のレコードを操作する2つの異なる方法です。

質問に最も簡単な答えは、クエリービルダーを操作するときにYiiビヘイビアを使用できないことです。

+0

ああ、私はそれを持って、非常にありがとう:) – dangchithao

関連する問題