我在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
如何在保存交易之前获取最后插入的ID
答案 0 :(得分:2)
我猜PDO(magento使用的)在事务尚未提交时无法获得last_inserted_id。我想你应该尝试像there这样的普通sql,或者尝试使用嵌套事务。
答案 1 :(得分:1)
Tyy: $ lastInsertId = $ connection-> lastInsertId();
答案 2 :(得分:0)
不确定交易的情况,但我通常这样做:
$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();
答案 3 :(得分:0)
在您调用save()
方法之前,Magento事务不会更改数据库中的数据:
$transaction->addObject($model1);
...
$transaction->save();
addObject()
只是将新对象添加到事务的注册表(\Mage_Core_Model_Resource_Transaction::$_objects
)。 $model1->save()
将调用$transaction->save()
方法。在$transaction->save()
调用之前,不会执行 INSERT 操作。