Magento 2 วิธีสร้างแอททริบิวการสั่งซื้อใหม่โดยทางโปรแกรม


12

ฉันค้นหาเว็บเกี่ยวกับวิธีสร้างแอตทริบิวต์การสั่งซื้อ (ถ้าเรียกว่าอะไร) โดยหลักแล้วฉันต้องการให้คอลัมน์ฐานข้อมูลใหม่ปรากฏในฐานข้อมูล sales_order เห็นได้ชัดว่าฉันสามารถสร้างด้วยตนเอง แต่มีวิธีที่ฉันสามารถสร้างได้ มันผ่านสคริปต์อัพเกรด / โดยทางโปรแกรม?

คำตอบ:


25

ในทางปฏิบัติมีสองวิธีหลักในการเพิ่มแอตทริบิวต์คำสั่งซื้อ (คอลัมน์ใหม่) เพื่อสั่งซื้อผ่านสคริปต์อัปเกรด

- การใช้ $ setup-> getConnection () -> addColumn ()

app / รหัส / ผู้ขาย / SalesOrder / ติดตั้ง / UpgradeSchema.php

<?php

namespace Vendor\SalesOrder\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;

class UpgradeSchema implements UpgradeSchemaInterface
{
    /**
     * Upgrades DB schema for a module
     *
     * @param SchemaSetupInterface $setup
     * @param ModuleContextInterface $context
     * @return void
     */
    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        $quote = 'quote';
        $orderTable = 'sales_order';

        $setup->getConnection()
            ->addColumn(
                $setup->getTable($quote),
                'custom_attribute',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                    'length' => 255,
                    'comment' =>'Custom Attribute'
                ]
            );
        //Order table
        $setup->getConnection()
            ->addColumn(
                $setup->getTable($orderTable),
                'custom_attribute',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                    'length' => 255,
                    'comment' =>'Custom Attribute'
                ]
            );

        $setup->endSetup();
    }
}

- การใช้การเสนอราคาและการขายจากโรงงาน

app / รหัส / ผู้ขาย / SalesOrder / ติดตั้ง / UpgradeData.php

<?php

namespace Vendor\SalesOrder\Setup;

use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Quote\Setup\QuoteSetupFactory;
use Magento\Sales\Setup\SalesSetupFactory;

class UpgradeData implements UpgradeDataInterface
{
    /**
     * @var QuoteSetupFactory
     */
    protected $quoteSetupFactory;

    /**
     * @var SalesSetupFactory
     */
    protected $salesSetupFactory;

    /**
     * @param QuoteSetupFactory $quoteSetupFactory
     * @param SalesSetupFactory $salesSetupFactory
     */
    public function __construct(
        QuoteSetupFactory $quoteSetupFactory,
        SalesSetupFactory $salesSetupFactory
    ) {
        $this->quoteSetupFactory = $quoteSetupFactory;
        $this->salesSetupFactory = $salesSetupFactory;
    }
    /**
     * Upgrades DB for a module
     *
     * @param ModuleDataSetupInterface $setup
     * @param ModuleContextInterface $context
     * @return void
     */
    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        /** @var \Magento\Quote\Setup\QuoteSetup $quoteInstaller */
        $quoteInstaller = $this->quoteSetupFactory->create(['resourceName' => 'quote_setup', 'setup' => $setup]);

        /** @var \Magento\Sales\Setup\SalesSetup $salesInstaller */
        $salesInstaller = $this->salesSetupFactory->create(['resourceName' => 'sales_setup', 'setup' => $setup]);

        $setup->startSetup();

        //Add multiple attributes to quote 
        $entityAttributesCodes = [
            'custom_attribute' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
            'custom_attribute1' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT

        ];

        foreach ($entityAttributesCodes as $code => $type) {

            $quoteInstaller->addAttribute('quote', $code, ['type' => $type, 'length'=> 255, 'visible' => false, 'nullable' => true,]);
             $salesInstaller->addAttribute('order', $code, ['type' => $type, 'length'=> 255, 'visible' => false,'nullable' => true,]);
            $salesInstaller->addAttribute('invoice', $code, ['type' => $type, 'length'=> 255, 'visible' => false, 'nullable' => true,]);
        }

        $setup->endSetup();
    }
}

ขอบคุณมากฉันเพิ่งจะเพิ่มโซลูชัน
André Ferraz

4
นี่เป็นเพียงการสร้างคอลัมน์พิเศษที่ว่างเปล่าในตารางคำสั่งใช่ไหม? เราจะคัดลอกข้อมูลจากแอตทริบิวต์ที่กำหนดเองลงในคอลัมน์พิเศษนี้ในตารางการสั่งซื้อได้อย่างไร
วีโอไอพีเรียนที่

1
ดีกว่าของสองวิธีคืออะไร
อเล็กซ์

คุณลักษณะนี้ส่งผ่านตามคำสั่งของบุคคลที่สามที่จัดการ API หรือไม่
Dhaduk Mitesh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.