Yii插入多个记录并返回ID(INSERT IGNORE)

时间:2015-01-16 10:53:51

标签: php mysql yii

在使用多个插入时,我在尝试获取最后插入行的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个数据库调用,更不用说在其他方法中的任何调用。

我已经考虑过稍后在流程中插入的可能性,但是我还有很多其他的方法和数据库调用等,如果记录只是重复的话,我宁愿不进行所有处理,其中很多都是。

任何建议都将受到赞赏。

1 个答案:

答案 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();