如何使用DAO检测Yii中事务中的最后一个插入ID?

时间:2014-06-03 11:42:24

标签: php yii transactions dao lastinsertid

这是源代码,我需要检测ID(请参阅下面两个查询之间的标记位置)。

$connection = Yii::app()->db;
$transaction=$connection->beginTransaction();
try {

    $q = "INSERT INTO `someTable1` .... ";      
    $connection->createCommand($q)->execute(); // Single Row Inserted

    // HERE!! How to get the last insert ID from query above

    $q = "INSERT INTO `someTable2` ....
          WHERE id = LAST_INSERT_ID_FROM_FIRST_QUERY ";
    $connection->createCommand($q)->execute();

    $transaction->commit();

} catch (Exception $e) {
    // react on exception   
    $trans->rollback();
} 

最合适的方法是什么?

3 个答案:

答案 0 :(得分:6)

$lastInsertID = $connection->getLastInsertID();

答案 1 :(得分:2)

你可以尝试两种方式,这里getLastInsertID是方法,而lastInsertID是属性

$lastInsertID = $connection->getLastInsertID();

$lastInsertID = $connection->lastInsertID;

了解更多信息http://www.yiiframework.com/doc/api/1.1/CDbConnection

答案 2 :(得分:1)

我创建了这个来解决这个问题

public static function getAutoIncrement($table_name)
{
    $q = new Query();
    $res = $q->select("AUTO_INCREMENT")
        ->from('INFORMATION_SCHEMA.TABLES')
        ->where("TABLE_SCHEMA = DATABASE() AND TABLE_NAME = '" . $table_name . "'")
        ->one();
    if ($res)
        return $res["AUTO_INCREMENT"];
    return false;
}