Magento 最后在事务中间插入 id

发布于 12-02 22:23 字数 677 浏览 2 评论 0原文

我正在 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

I am using transactions in Magento.
I need to use primeryKey of first insert query to all my subsequent queries.


    $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

how to get last inserted id before saving the transaction

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

醉酒的小男人2024-12-09 22:23:05

我猜当事务尚未提交时,PDO(magento 使用)无法获取last_inserted_id。我想你应该尝试像那里这样的普通sql尝试使用嵌套事务。

I guess PDO (which magento uses) can't get last_inserted_id while transaction isn't commited yet. I guess you should either try plain sql like there or try use nested transactions.

甜味拾荒者2024-12-09 22:23:05

泰伊这个:
$lastInsertId = $connection->lastInsertId();

Tyy this:
$lastInsertId = $connection->lastInsertId();

揪着可爱2024-12-09 22:23:05

不确定交易的情况,但我通常这样做:

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

Not sure about the case with transactions, but I usually do it like this:

$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();
有木有妳兜一样2024-12-09 22:23:05

在调用 save() 方法之前,Magento 事务不会更改数据库中的数据:

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

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

Magento transaction does not change data in the DB until you call save() method:

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

addObject() just adds new object to the transaction's registry (\Mage_Core_Model_Resource_Transaction::$_objects). $model1->save() method will be called on $transaction->save(). No INSERT operation is performed before $transaction->save() call.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文