在使用多个插入时,我在尝试获取最后插入行的ID时遇到了一些问题。
我希望将记录插入到数据库中,例如使用:
$sql ="INSERT IGNORE INTO test(date, src, dst) VALUES ('2014-01-15','1','2') ('2014-01-12','9','2')";
$added = Yii::app()->db->createCommand($sql)->execute();
这很棒,因为我有一个动态数量的记录,我可以形成这个查询并插入所有记录(我一次处理几千个)。问题是我需要id
传递给下一个方法。
我目前无法看到任何获取Ids的方式,所有搜索对我来说都是空的。因此我被迫使用这种方法。
foreach($allDataProcessed AS $v)
{
$model = new Destination;
$model->date = $v['date'];
$model->src = $v['src'];
$model->dst = $v['dst'];
if($model->ignore->save())
$ids[] = $model->id;
}
这里的问题显然是我必须与数据库交互的次数。如果我要插入1000条记录,我们已经从一个数据库调用变为1000个数据库调用,更不用说在其他方法中的任何调用。
我已经考虑过稍后在流程中插入的可能性,但是我还有很多其他的方法和数据库调用等,如果记录只是重复的话,我宁愿不进行所有处理,其中很多都是。
任何建议都将受到赞赏。
答案 0 :(得分:0)
我希望我能帮到你!
要知道的第一件事是yii有一个方法来获取最后插入的行......
Yii::app()->db->getLastInsertID();
之后我会说你可能有兴趣使用交易来保证一切按预期工作......我给你留下一些算法
$transaction = Yii::app()->db->beginTransaction();
// do your things as needed
// things go sweet
$transaction->commit();
// if things get wild...
$transaction->rollback();