我一直在网上搜索如何创建订单属性(如果就是这样),本质上我只是想在sales_order数据库中显示一个新的数据库列,显然我可以手动创建它,但是有一种方法可以创建通过升级脚本/以编程方式?
我一直在网上搜索如何创建订单属性(如果就是这样),本质上我只是想在sales_order数据库中显示一个新的数据库列,显然我可以手动创建它,但是有一种方法可以创建通过升级脚本/以编程方式?
Answers:
实际上,有两种主要方法可以通过升级脚本将订单属性(新列)添加到订单中。
- 使用$ setup-> getConnection()-> addColumn()
app / code / Vendor / SalesOrder / Setup / 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 / code / Vendor / SalesOrder / Setup / 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();
}
}