Magento последний идентификатор вставки в середине транзакции - PullRequest
1 голос
/ 03 сентября 2011

Я использую транзакции в Magento.Мне нужно использовать primeryKey запроса первой вставки для всех моих последующих запросов.


    $model1->setfield1()
           ->setField2();
    $transaction->addObject($model1);
    $connection    = Mage::getSingleton('core/resource')->getConnection('core_read');
    $lastInsertId  = $connection->fetchOne('SELECT last_insert_id()'); // return 0
    $model2->setfield3($lastInsertId )
    $model3->setfield4($lastInsertId )
    $transaction->addObject($model2);
    $transaction->addObject($model3);

    $transaction-Save();
    $lastInsertId2  = $connection->fetchOne('SELECT last_insert_id()'); // returns correct result

как получить последний вставленный идентификатор перед сохранением транзакции

Ответы [ 4 ]

2 голосов
/ 06 сентября 2011

Я полагаю, что PDO (который использует magento) не может получить last_inserted_id, пока транзакция еще не зафиксирована.Я думаю, вы должны либо попробовать простой SQL как там или попробовать использовать вложенные транзакции.

1 голос
/ 03 сентября 2011

Ты это: $ lastInsertId = $ connection-> lastInsertId ();

0 голосов
/ 19 июля 2016

Magento транзакция не изменяет данные в БД, пока вы не вызовете save() метод:

$transaction->addObject($model1);
...
$transaction->save();

addObject() просто добавляет новый объект в реестр транзакций (\Mage_Core_Model_Resource_Transaction::$_objects). $model1->save() метод будет вызван на $transaction->save(). Нет INSERT операция выполняется перед $transaction->save() вызовом.

0 голосов
/ 15 марта 2013

Не уверен насчет случая с транзакциями, но я обычно делаю это так:

$data = $this->getRequest()->getPost();
$list = Mage::getModel('myextension/list')->setData($data);
$list->setUserId($userId)
    ->setCreatedTime(now());

try
{
 $list->save();
}
catch(Exception $e)
{
 Mage::getSingleton('core/session')->addError($e->getMessage());
 return $this->_redirect('*/*/');
}

$last_insert_id = $list->getId();
...