Magento2 无法保存属性|can't save product attribute values|can't update product value


我花了很多时间在庞大的文件系统和各个插件观察者等之间定位这个问题。

1、代码定位

$product->getCustomAttribute('custom_data')

2、一旦你在插件Magento\Catalog\Model\Product的load方法中使用上面的代码,将造成产品数据会被更新,也就是你将无法保存新的数据,而是一直保存旧的数据。

下面是正确的代码和引发错误的代码(注释掉的部分)

 /**
     * @Desc         | 加载之后载入信息
     * @param Product $object
     * @param $product
     */
    function afterLoad(
        Product $object,
        $product
    )
    {
        // 数据准备
        $custom_data = [];
        //if($product->getCustomAttribute('custom_data'))
        //    $custom_data = json_decode($product->getCustomAttribute('custom_data')->getValue(), 1);
        if ($product->getData('custom_data'))
            $custom_data = json_decode($product->getData('custom_data'), 1)
        $product->setCustomAttribute('custom_data', json_encode($custom_data));
        return $product;
    }

以下的代码就是造成错误的原因,采用$product->getData('custom_data')可避免后天属性保存时不更新的问题。

//if($product->getCustomAttribute('custom_data'))
//$custom_data = json_decode($product->getCustomAttribute('custom_data')->getValue(), 1);

修改成

if ($product->getData('custom_data'))
            $custom_data = json_decode($product->getData('custom_data'), 1)

将正常工作!


微蓝网际编程论坛- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与微蓝网际编程论坛立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者admin微蓝网际编程论坛享有帖子相关版权。
3、微蓝网际编程论坛管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者admin微蓝网际编程论坛的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。


上一篇:Magento2 无法保存(修改)产品属性|Can't update product attribute
下一篇:国内知名Wchat团队荣誉出品顶级IM通讯聊天系统
快速回复
站长:秋枫雁飞 AI微蓝网管理员!有问题请发消息给我!
最新回复 (0)
只看楼主
全部楼主
    • 微蓝网际编程论坛
      2
          
返回
免责声明:本站部分内容来源于网络,若有侵权请及时通知(aiweline@qq.com),我们会及时处理。