Yii2:如何通过使用batchInsert添加多行来获取每个记录主键?

Yii2:如何通过使用batchInsert添加多行来获取每个记录主键?,yii,yii2,Yii,Yii2,我使用这个batchInsert命令一次添加多行。我想获取每个记录的主键(最后一个插入Id)。我该怎么做 $insertCount = Yii::$app->db->createCommand() ->batchInsert( Testuser::tableName(), $columnNameArray,$bulkInsertArray) ->execute(); 我建议id列是自动递增的。 因此,我们可以得到最

我使用这个batchInsert命令一次添加多行。我想获取每个记录的主键(最后一个插入Id)。我该怎么做

  $insertCount = Yii::$app->db->createCommand()
             ->batchInsert(
             Testuser::tableName(), $columnNameArray,$bulkInsertArray)
->execute();

我建议id列是自动递增的。 因此,我们可以得到最后一个插入的id,然后计算第一个插入的id(更正):

然后插入的行具有从$firstId到$lastId的ID。
最后一个插入id返回批量插入时第一个插入行的id。

AFAIK批量插入时没有可靠的方法获取所有id。除了在插入时为一个特殊列指定一个特定的值,然后获取该值的所有ID之外,我想不出任何其他方法。这是不可靠的-有时这种方法会失败得很惨。我想了解更多。你能提供一些信息吗?你有证据证明批量插入表是一种原子操作吗?否则,两个并发插入将破坏您的逻辑。根据这个问题,大容量插入是原子的,尽管原子性不能保证ID将具有连续的值。但是“当访问自动递增计数器时,InnoDB使用一个特殊的表级auto-INC锁,它保留到当前SQL语句的末尾”和“两个事务不能同时在同一个表上具有auto-INC锁”。因此,它似乎保证了连续的ids值。我承认,你是对的。答案仍然让我感到不安,因为无法保证底层系统实际上是MySQL,并且它实际上使用的是InnoDB。如果我要编写这样的代码,我宁愿出于安全考虑,也不要假设自动生成的ID是连续的。
$firstId = Yii::$app->db->getLastInsertID();
$lastId  = $firstId + $insertCount - 1;