2015-05-06 84 views
0

我們使用Symfony2,Propel和觸發器與一個mssql服務器。問題如下: *從表單中,我們在DB中插入一個新對象 *然後用觸發器將插入記錄到表中 *然後從propel對象中我們得到插入的ID =>它是假。Propel/mssql:最後一個插入ID

進一步分析後,propel使用PHP函數PDO :: lastInsertId獲取數據庫中最後一個插入的ID,該函數返回插入到日誌表中的行的ID。

我認爲Propel應該使用SELECT SCOPE_IDENTITY()來代替,這將在觸發器運行到另一個上下文時返回對象ID。

問題是:如何告訴推動使用這個函數?在行走束,有MssqlPropelPDO類,它的實現是:

public function lastInsertId($seqname = null) 
{ 
    $result = self::query('SELECT SCOPE_IDENTITY()'); 

    return (int) $result->fetchColumn(); 
} 

但這類不是從我的代碼使用,而這是DebugPDO(只見到到BasePeer類)。

回答

0

你會更好使用OUTPUT子句然後用PDO取回來:

如。

$sql = "INSERT INTO product (product_name) OUTPUT INSERTED.product_id VALUES (?)"; 

$sth = $dbh->prepare($sql); 

$sth->execute(array('widgets')); 

$temp = $sth->fetch(PDO::FETCH_ASSOC); 

您可以在OUTPUThere讀了。