MagentoのシンプルなORM(Mage_Core_Model_Abstract
およびMage_Core_Model_Resource_Abstract
)を使用して、特定の主キーを持つモデル行を挿入する方法はありますか?
たとえば、空のMagentoシステムに対して次を実行した場合
Mage::getModel('core/website')->setData(array (
'website_id' => 2,
'code' => 'foo',
'name' => 'Main Website',
'sort_order' => 0,
'default_group_id' => 1,
'is_default' => 1,
));
core_website
テーブルに新しいエントリが追加される予定です。ただし、Magentoはここで静かに何もしません。
リソースを掘り下げると、データベースリソースクラスでこれに違反しているように見えます
#File: app/code/core/Mage/Core/Model/Resource/Db/Abstract.php
if (!is_null($object->getId()) && (!$this->_useIsObjectNew || !$object->isObjectNew())) {
//update stuff here
}
else
{
//insert stuff here
}
モデルにはidがあり(つまり、特定のIDを挿入しています)、_useIsObjectNew
ハードコーディングがfalseになっているため、保存要求は常にinsert
パスにルーティングされます。
デフォルトのMagentoモデルで強制的に挿入する方法はありますか?(書き換え/クラス置換なし)。
はい、生のSQLはオプションですが、イベント機能は失われます。
自動インクリメントフィールドにIDを割り当てようとしているのはなぜですか?これがダウンストリームの依存関係である場合、レコードを作成してから自動生成されたPKを取得するだけではいけませんか?
—
ラルフ・タイス
@RalphTiceはい、それはおそらく日常の使用のために行う正しいことでしょう。
—
アランストーム