1

Magento でトランザクションを使用しています。最初の挿入クエリのprimaryKeyを後続のすべてのクエリに使用する必要があります。


    $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 を取得する方法

4

4 に答える 4

2

トランザクションがまだコミットされていない間、PDO(magentoが使用する)はlast_inserted_idを取得できないと思います。そこのような単純なSQLを試すか、ネストされたトランザクションを使用してみる必要があると思います。

于 2011-09-05T23:08:12.017 に答える
2

これを試してみてください: $lastInsertId = $connection->lastInsertId();

于 2011-09-03T11:21:58.720 に答える
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();
于 2013-03-15T05:01:53.167 に答える
0

save()メソッドを呼び出すまで、Magento トランザクションは DB 内のデータを変更しません。

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

addObject()新しいオブジェクトをトランザクションのレジストリに追加するだけです ( \Mage_Core_Model_Resource_Transaction::$_objects)。$model1->save()メソッドは で呼び出され$transaction->save()ます。呼び出しの前にINSERT操作は実行されません。$transaction->save()

于 2016-07-19T10:55:02.347 に答える