2011-09-03 62 views
1

我正在使用Magento中的交易。 我需要使用primeryKey的第一次插入查询到我所有的后续查询。Magento最后在交易中插入id


    $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 

如何最后达到节约交易

回答

2

我猜PDO(magento使用)无法得到last_inserted_id而事务尚未提交。我想你应该尝试普通的SQL像there或尝试使用嵌套事务。

+0

如何在Magento中使用嵌套事务? – sushantsahay

1

TYY此之前插入ID: $ lastInsertId = $连接 - > lastInsertId();

+0

嗨Sudhir,在保存事务之前调用它返回0,就像我的代码返回一样,在保存transactin之后调用它返回正确的结果。 – sushantsahay

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(); 
0

Magento的交易在DB直到调用save()方法不更改数据:

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

addObject()只是将新的对象添加到事务的注册表中(\Mage_Core_Model_Resource_Transaction::$_objects)。将在$transaction->save()上调用$model1->save()方法。否INSERT操作在$transaction->save()调用之前执行。