Magento 2 скопируйте значение из пользовательского атрибута в элемент заказа


Я создал пользовательский атрибут для продуктов. И я также создал дополнительный столбец в sales_order_item. Как я могу скопировать значение из этого пользовательского атрибута в новый столбец в sales_order_item при размещении заказа?

Author: Magento Learner, 2017-04-04

1 answers

Вы можете использовать плагин для добавления пользовательского атрибута в sales_order_item при размещении заказа. создайте di.xml на под etc/di.xml .

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd" >
    <type name='Magento\Quote\Model\Quote\Item\ToOrderItem'>
        <plugin name='AddOrderItemPlugin' type='Vendorname\Module\Plugin\Model\Quote\Item\ToOrderItem' sortOrder='99'/>
    </type>
</config>

Теперь добавьте файл Vendorname\Module\Plugin\Model\Quote\Item\ToOrderItem.php

<?php 
namespace Vendorname\Modulename\Plugin\Model\Quote\Item;

    class ToOrderItem {

        /**
         *
         * @var type \Magento\Catalog\Model\Product
         */
        protected $productRepository;

        /**
         * @param \Magento\Catalog\Model\Product $productRepository 
         */
        public function __construct(
        \Magento\Catalog\Model\Product $productRepository 
        ) {
            $this->productRepository = $productRepository;
        }

        /**
         * 
         * @param \Magento\Quote\Model\Quote\Item\ToOrderItem $subject
         * @param \Vendorname\Modulename\Plugin\Model\Quote\Item\callable $proceed
         * @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
         * @param type $additional
         * @return type
         */
        public function aroundConvert(
        \Magento\Quote\Model\Quote\Item\ToOrderItem $subject, callable $proceed, \Magento\Quote\Model\Quote\Item\AbstractItem $item, $additional = []
        ) {

            $orderItem = $proceed($item, $additional);
            $productId = $item->getProduct()->getId();
            $product = $this->productRepository->load($productId);
            $supplier = $product->getSuppliers();//my custom product attribute
            $orderItem->setSupplierId($supplier);//saving into orde item in `supplier_id` column
            return $orderItem;
        }

    }
 4
Author: Salma Saiyad, 2017-12-08 06:34:30