モジュールのアップグレードで Mage::getModel を使用してデータベースにレコードを保存する際に問題があります。
モジュールのインストール時にアフィリエイト プログラムをアフィリエイトプラス モジュール テーブルに追加したいと考えています。私のモジュールは、affiliateplus モジュールを上書きします。
mysql4-upgrade-0.1.3-0.1.4.php にコードがあります
$installer = $this;
$installer->startSetup();
$_programList =[
'affiliate'=>[
'program_id'=>1,
'name' =>'Program Afiliacyjny',
'created_date' =>date('Y-m-d'),
'status' =>1,
'expire_time'=>0,
'num_account'=>2,
'total_sales_amount' =>0.00,
'commission_type'=>'precentage',
'commission'=>1,
'discount_type'=>'precentage',
'discount' =>1,
'autojoin' =>1,
'scope' =>0,
'customer_groups' =>null,
'show_in_welcome' =>0,
'valid_from' =>null,
'valid_to' =>null,
'use_coupon' =>0,
'coupon_pattern'=>null ,
'affiliate_type'=>null ,
'description' =>'Program Afiliacyjny',
'conditions_serialized' =>'a:6:{s:4:"type";s:32:"salesrule/rule_condition_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";}',
'actions_serialized' =>'a:6:{s:4:"type";s:40:"salesrule/rule_condition_product_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";}',
'is_process' =>0,
'use_tier_config'=>0 ,
'max_level' =>0,
'tier_commission'=>null ,
'sec_commission' =>0,
'sec_commission_type'=>0 ,
'secondary_commission' =>0,
'sec_discount' =>0,
'sec_discount_type'=>null ,
'secondary_discount' =>0,
'customer_group_ids' =>'1',
'use_sec_tier' =>0,
'sec_tier_commission'=>null
],
['more elements...']
];
foreach($_programList as $_v){
$_program = Mage::getModel('affiliateplusprogram/program');
$_program->setData($_v);
$_program->save();
unset($_program);
}
$installer->endSetup();
私も試しました:
- ループ内の foreach と各値の setData 。
- 保存前の setId()
foreach の後にオブジェクトを表示すると、メソッドのない値のみを持つオブジェクトになります。Magento はエラーと警告を表示しません。私のモジュールは適切なバージョンにアップグレードされていますが、データベース テーブルが空です。
すべてのチュートリアルで id simple Mage::getModel ->setData()->save() を解決します