为了账号安全,请及时绑定邮箱和手机立即绑定

Magento 2.3 - 无法通过数据/架构补丁(声明性架构)更改/插入表

Magento 2.3 - 无法通过数据/架构补丁(声明性架构)更改/插入表

PHP
aluckdog 2022-01-02 19:42:57
我正在使用本指南和指南2作为参考,将自定义属性添加到catalog_product,但该补丁不起作用。这是补丁文件 (JKM\CustomModule\Setup\Patch\Data\AddShopAttribute.php):<?phpnamespace JKM\CustomModule\Patch\Data;use Magento\Eav\Setup\EavSetup;use Magento\Eav\Setup\EavSetupFactory;use Magento\Framework\Setup\ModuleDataSetupInterface;use Magento\Framework\Setup\Patch\DataPatchInterface;class AddShopAttribute implements DataPatchInterface{    /** @var ModuleDataSetupInterface */    private $moduleDataSetup;    /** @var EavSetupFactory */    private $eavSetupFactory;    /**     * @param ModuleDataSetupInterface $moduleDataSetup     * @param EavSetupFactory $eavSetupFactory     */    public function __construct(        ModuleDataSetupInterface $moduleDataSetup,        EavSetupFactory $eavSetupFactory    ) {        $this->moduleDataSetup = $moduleDataSetup;        $this->eavSetupFactory = $eavSetupFactory;    }    /**     * {@inheritdoc}     */    public function apply()    {        /** @var EavSetup $eavSetup */        $eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]);        $eavSetup->addAttribute('catalog_product', 'shop', [            'type' => 'int',            'label' => 'Shop',            'input' => 'select',            'used_in_product_listing' => true,            'user_defined' => true,        ]);    }    /**     * {@inheritdoc}     */    public static function getDependencies()    {        return [];    }    /**     * {@inheritdoc}     */    public function getAliases()    {        return [];    }}运行命令时出现此错误bin/magento setup:upgrade:模块“CustomModle”:警告:call_user_func() 期望参数 1 是有效的回调,在 magento-root-folder/vendor/magento/framework/Setup/Patch/ 中找不到类我设法创建了一个表(db_schema.xml 有效)但它是空的。出于某种原因,数据/架构补丁对我不起作用。模块路径是否正确(应用程序/代码/命名空间/模块)?什么可能导致这种行为?任何帮助,将不胜感激。
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

好像你的属性参数没有完成。尝试改用此代码。


<?php

namespace JKM\CustomModule\Patch\Data;


use Magento\Eav\Setup\EavSetup;

use Magento\Eav\Setup\EavSetupFactory;

use Magento\Framework\Setup\ModuleDataSetupInterface;

use Magento\Framework\Setup\Patch\DataPatchInterface;


class AddShopAttribute implements DataPatchInterface

{

    /** @var ModuleDataSetupInterface */

    private $moduleDataSetup;


    /** @var EavSetupFactory */

    private $eavSetupFactory;


    /**

     * @param ModuleDataSetupInterface $moduleDataSetup

     * @param EavSetupFactory $eavSetupFactory

     */

    public function __construct(

        ModuleDataSetupInterface $moduleDataSetup,

        EavSetupFactory $eavSetupFactory

    ) {

        $this->moduleDataSetup = $moduleDataSetup;

        $this->eavSetupFactory = $eavSetupFactory;

    }


    /**

     * {@inheritdoc}

     */

    public function apply()

    {

        /** @var EavSetup $eavSetup */

        $eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]);


        $eavSetup->addAttribute(\Magento\Catalog\Model\Product::ENTITY, 'shop', [

            'type' => 'int',

            'backend' => '',

            'frontend' => '',

            'label' => 'Shop',

            'input' => 'select',

            'class' => '',

            'source' => \Magento\Catalog\Model\Product\Attribute\Source\Boolean::class,

            'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,

            'visible' => true,

            'required' => true,

            'user_defined' => false,

            'default' => '',

            'searchable' => false,

            'filterable' => false,

            'comparable' => false,

            'visible_on_front' => false,

            'used_in_product_listing' => true,

            'unique' => false,

        ]);


        $groupName = 'Autosettings';

        $entityTypeId = $catalogSetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);

        $attributeSetId = $catalogSetup->getAttributeSetId($entityTypeId, 'Default');

        $attribute = $catalogSetup->getAttribute($entityTypeId, 'shop');

        if ($attribute) {

            $catalogSetup->addAttributeToGroup(

                $entityTypeId,

                $attributeSetId,

                $groupName,

                $attribute['attribute_id'],

                60

            );

        }

    }


    /**

     * {@inheritdoc}

     */

    public static function getDependencies()

    {

        return [];

    }


    /**

     * {@inheritdoc}

     */

    public function getAliases()

    {

        return [];

    }

}



查看完整回答
反对 回复 2022-01-02
  • 1 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信