2015-05-06 6 views
0

Мы используем Symfony2, Propel и триггеры с сервером mssql. Проблема заключается в следующем: * из формы мы вставляем новый объект в DB *, тогда триггер используется для регистрации вставки в таблицу *, то из объекта propel мы получаем вставленный ID => он ложный.Propel/mssql: последняя вставка ID

После дальнейшего анализа propel получает последний вставленный идентификатор в БД, используя функцию PHP PDO :: lastInsertId, которая возвращает идентификатор строки, вставленной в таблицу журнала.

Я думаю, что Propel должен использовать SELECT SCOPE_IDENTITY() вместо этого, это вернет идентификатор объекта, когда триггер запускается в другой контекст.

Вопрос в том, как сказать, чтобы использовать эту функцию? В пачке Propel, есть 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.

 Смежные вопросы

  • Нет связанных вопросов^_^