Propel / mssql:最后一次插入ID

时间:2015-05-06 09:27:04

标签: sql-server symfony propel

我们使用Symfony2,Propel和mssql服务器触发器。问题如下: *从表单中,我们在DB中插入一个新对象 *然后使用触发器将插入记录到表中 *然后从推进对象我们得到插入的ID =>这是假的。

进一步分析后,使用PHP函数PDO :: lastInsertId获取数据库中最后一个插入的ID,它返回插入日志表中的行的ID。

我认为Propel应该使用SELECT SCOPE_IDENTITY(),这会在触发器进入另一个上下文时返回对象ID。

问题是:如何告诉推动使用此功能?在Propel包中,有一个MssqlPropelPDO类,其实现是:

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

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

但是我的代码中没有使用这个类,而是DebugPDO(我看到了BasePeer类)。

1 个答案:

答案 0 :(得分: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);

您可以阅读OUTPUT here