2011-09-03 84 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()調用之前執行。