【问题标题】:Adding custom magento options fails: Integrity constraint violation添加自定义 magento 选项失败:违反完整性约束
【发布时间】:2018-09-14 14:50:23
【问题描述】:

我正在尝试从代码创建自定义选项,但是当我尝试为“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 实现。

【问题讨论】:

    标签: php mysql magento foreign-keys magento-1.9


    【解决方案1】:

    我发现了一种克服错误的方法:只需禁用对外键的控制。

    主类函数

    $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}");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-09
      • 2023-04-03
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2021-06-10
      • 2021-03-24
      相关资源
      最近更新 更多