我正在使用batchInsert()
Yii2
数据库访问对象的功能。我需要运行另一个函数,比如在插入每个记录后从PHP代码发送电子邮件。实现此目的的解决方法是什么?或者是否可以插入所有AUTO_INCREMENT
个行?
代码是
Yii::$app->db->createCommand()->batchInsert(Address::tableName(),
['form_id','address'], $rows)->execute();
我正在使用https://www.yiiframework.com/doc/api/2.0/yii-db-command#batchInsert()-detail
中记录的batchInsert()
答案 0 :(得分:1)
首先,您没有使用ActiveRecord。有关ActiveRecord的更多信息,请参阅文档:API和guide。 Yii::$app->db->createCommand()
是一个DAO,它比ActiveRecord简单得多,并且不支持同样的事件。
其次,ActiveRecord没有batchInsert()
,并且有充分的理由 - 当您批量插入时,很难检测插入记录的ID(至少在可靠的数据库中)独立的方式)。有关这方面的更多信息,请参阅GitHub。
但是,如果您在插入之前知道记录的ID或某些唯一字段(例如用户除了数字ID,它还有唯一的登录名和/或电子邮件),您可以在手动插入和运行事件后获取它们:
$models = Address::findAll(['email' => $emailsArray]);
foreach ($models as $model) {
$model->trigger('myEvent');
}
但是,除非你要插入数百万条记录,否则你应该坚持使用简单的foreach和$model->save()
,以简化和可靠。
还有一个yii2-collection官方扩展名。这更像是草案和POC,但未来可能会很有趣。