添加自定义 magento 选项失败:违反完整性约束
Adding custom magento options fails: Integrity constraint violation
我正在尝试从代码创建自定义选项,但是当我尝试为 'values' 数组赋值时,出现此错误(参见图片)。
因此,如果我创建一个其中没有字段的选项('values' 空数组)一切正常,但如果我放置一个包含一些元素的数组,它就会出错。
我不明白为什么函数不能保证密钥的完整性'addOption ()'或者我做错了什么。
下面也是这段代码:
// ... get function params etc ...
// conf
$product_id = 1686;
$store = 0;
// init
$product = Mage::getModel('catalog/product')->setStoreId($store)->load($product_id);
$options = Mage::getModel('catalog/product_option')->getProductOptionCollection($product);
// ... options clearing ...
// set option
$option = array(
'title' => 'bundle',
'type' => 'radio',
'is_required' => 1,
'sort_order' => 0,
'values' => array(
array(
'title' => 'Standard',
'price' => 10.11,
'price_type' => 'fixed',
'sku' => 'ex_standard',
'sort_order' => 0,
),
array(
'title' => 'Premium',
'price' => 20.50,
'price_type' => 'fixed',
'sku' => 'ex_premium',
'sort_order' => 0,
),
array(
'title' => 'Deluxe',
'price' => 85.00,
'price_type' => 'fixed',
'sku' => 'ex_deluxe',
'sort_order' => 0,
)
)
);
// apply changes
$product->setCanSaveCustomOptions(true);
$product->getOptionInstance()->addOption($option);
$product->setHasOptions(true);
$product->save();
备注:
基于 Magento 1.9,对于自定义选项,我们使用 MageWorx 实现。
我发现了一个克服错误的方法:简单地禁用外键控制。
主要Class功能
$write = Mage::getSingleton("core/resource")->getConnection("core_write");
$this->setKeyCheck($write,0); // disable foreign keys
/* ... Generate options ... */
$this->setKeyCheck($write,1); // enable foreign keys
解析函数的定义
private function setKeyCheck($write,$status){
$write->query("SET FOREIGN_KEY_CHECKS={$status}");
}
我正在尝试从代码创建自定义选项,但是当我尝试为 'values' 数组赋值时,出现此错误(参见图片)。
因此,如果我创建一个其中没有字段的选项('values' 空数组)一切正常,但如果我放置一个包含一些元素的数组,它就会出错。
我不明白为什么函数不能保证密钥的完整性'addOption ()'或者我做错了什么。
下面也是这段代码:
// ... get function params etc ...
// conf
$product_id = 1686;
$store = 0;
// init
$product = Mage::getModel('catalog/product')->setStoreId($store)->load($product_id);
$options = Mage::getModel('catalog/product_option')->getProductOptionCollection($product);
// ... options clearing ...
// set option
$option = array(
'title' => 'bundle',
'type' => 'radio',
'is_required' => 1,
'sort_order' => 0,
'values' => array(
array(
'title' => 'Standard',
'price' => 10.11,
'price_type' => 'fixed',
'sku' => 'ex_standard',
'sort_order' => 0,
),
array(
'title' => 'Premium',
'price' => 20.50,
'price_type' => 'fixed',
'sku' => 'ex_premium',
'sort_order' => 0,
),
array(
'title' => 'Deluxe',
'price' => 85.00,
'price_type' => 'fixed',
'sku' => 'ex_deluxe',
'sort_order' => 0,
)
)
);
// apply changes
$product->setCanSaveCustomOptions(true);
$product->getOptionInstance()->addOption($option);
$product->setHasOptions(true);
$product->save();
备注: 基于 Magento 1.9,对于自定义选项,我们使用 MageWorx 实现。
我发现了一个克服错误的方法:简单地禁用外键控制。
主要Class功能
$write = Mage::getSingleton("core/resource")->getConnection("core_write");
$this->setKeyCheck($write,0); // disable foreign keys
/* ... Generate options ... */
$this->setKeyCheck($write,1); // enable foreign keys
解析函数的定义
private function setKeyCheck($write,$status){
$write->query("SET FOREIGN_KEY_CHECKS={$status}");
}