Magento 2 InstallSchema 方法未执行
Magento 2 InstallSchema method not executed
在我自己的 Magento 2 自定义模块上,我想安装一个自定义数据库 table。这是 InstallSchema class 代码:
<?php
namespace MyVendor\MyModule\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class InstallSchema implements InstallSchemaInterface
{
/**
* @inheritdoc
*/
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
$table = $setup->getConnection()
->newTable($setup->getTable('my_table'))
->addColumn(
'greeting_id',
\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
null,
['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
'Greeting ID'
)
->addColumn(
'message',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
255,
['nullable' => false, 'default' => ''],
'Message'
)->setComment("Greeting Message table");
$setup->getConnection()->createTable($table);
$setup->endSetup();
}
}
但是没有执行安装方法
在函数内附加了一个带有断点的 xdebug 会话,从未调用过。
删除了 setup_module 数据库中的模块行 table 并重新 运行 bin/magento setup:upgrade
设置开发者模式,禁用缓存,运行一个setup:di:compile
,还是失败
有什么想法吗?
我也尝试过使用 UpdateSchema 更改模块版本,但没有成功。
我 运行 在 Ubuntu 服务器虚拟机上安装 Magento 2。文件夹权限设置正确。
请在 InstallSchema 文件中声明并添加依赖项,如下所示:-
namespace <Your_Package>\<Your_Module>\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
然后清除缓存并从生成的文件夹中删除数据并从 setup_module 中删除模块条目。
确保您在 module.xml 文件
中定义了正确的安装版本
找到解决方案。它是 module.xml 文件中的模块名称。 setup:upgrade 安装程序在区分大小写的文件夹路径中搜索 InstallSchema,因此如果您将模块声明为
my_module
它将搜索 MyVendor/my/module/Setup 个文件夹。
我通过将名称替换为:
来解决它
我的模块
因此安装程序将在 MyVendor/MyModule/Setup 文件夹中正确搜索。
我通过在 Magento 安装文件夹的 Install.php 文件中放置日志消息,发现了 "old-way" 的问题。
@wildchild 很高兴让它与另一个解决方案一起使用。在你的问题中,你没有提到你使用的是 2.2.* 还是 2.3.*,你只是说了 Magento 2.
从一台服务器移动到另一台服务器并从 2.2 升级到 2.3 后,我遇到了同样的问题,我的自定义模块停止工作,PHP 脚本未在数据库中创建 table。
后来我发现Magento改变了音乐现在你必须使用声明式模式结构
Module_Vendor/Module_Name/etc/db_schema.xml
文件声明了模块的数据库结构。
查看下面的示例,您应该 read more here
创建一个table
以下示例创建具有四列的 declarative_table table。 id_column 列是主键。
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
<table name="declarative_table">
<column xsi:type="int" name="id_column" padding="10" unsigned="true" nullable="false" comment="Entity Id"/>
<column xsi:type="int" name="severity" padding="10" unsigned="true" nullable="false" comment="Severity code"/>
<column xsi:type="varchar" name="title" nullable="false" length="255" comment="Title"/>
<column xsi:type="timestamp" name="time_occurred" padding="10" comment="Time of event"/>
<constraint xsi:type="primary" referenceId="PRIMARY">
<column name="id_column"/>
</constraint>
</table>
</schema>
然后运行这些命令// ubuntu
php bin/magento setup:upgrade && php bin/magento cache:flush && php bin/magento cache:clean
在我的例子中,package name
是错误的。用正确的包名称替换后问题得到修复。
namespace Package_Name\Module_Name\Setup;
在我自己的 Magento 2 自定义模块上,我想安装一个自定义数据库 table。这是 InstallSchema class 代码:
<?php
namespace MyVendor\MyModule\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class InstallSchema implements InstallSchemaInterface
{
/**
* @inheritdoc
*/
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
$table = $setup->getConnection()
->newTable($setup->getTable('my_table'))
->addColumn(
'greeting_id',
\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
null,
['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
'Greeting ID'
)
->addColumn(
'message',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
255,
['nullable' => false, 'default' => ''],
'Message'
)->setComment("Greeting Message table");
$setup->getConnection()->createTable($table);
$setup->endSetup();
}
}
但是没有执行安装方法
在函数内附加了一个带有断点的 xdebug 会话,从未调用过。
删除了 setup_module 数据库中的模块行 table 并重新 运行
bin/magento setup:upgrade
设置开发者模式,禁用缓存,运行一个
setup:di:compile
,还是失败
有什么想法吗? 我也尝试过使用 UpdateSchema 更改模块版本,但没有成功。
我 运行 在 Ubuntu 服务器虚拟机上安装 Magento 2。文件夹权限设置正确。
请在 InstallSchema 文件中声明并添加依赖项,如下所示:-
namespace <Your_Package>\<Your_Module>\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
然后清除缓存并从生成的文件夹中删除数据并从 setup_module 中删除模块条目。 确保您在 module.xml 文件
中定义了正确的安装版本找到解决方案。它是 module.xml 文件中的模块名称。 setup:upgrade 安装程序在区分大小写的文件夹路径中搜索 InstallSchema,因此如果您将模块声明为
my_module
它将搜索 MyVendor/my/module/Setup 个文件夹。
我通过将名称替换为:
来解决它我的模块
因此安装程序将在 MyVendor/MyModule/Setup 文件夹中正确搜索。
我通过在 Magento 安装文件夹的 Install.php 文件中放置日志消息,发现了 "old-way" 的问题。
@wildchild 很高兴让它与另一个解决方案一起使用。在你的问题中,你没有提到你使用的是 2.2.* 还是 2.3.*,你只是说了 Magento 2.
从一台服务器移动到另一台服务器并从 2.2 升级到 2.3 后,我遇到了同样的问题,我的自定义模块停止工作,PHP 脚本未在数据库中创建 table。
后来我发现Magento改变了音乐现在你必须使用声明式模式结构
Module_Vendor/Module_Name/etc/db_schema.xml
文件声明了模块的数据库结构。
查看下面的示例,您应该 read more here
创建一个table
以下示例创建具有四列的 declarative_table table。 id_column 列是主键。
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
<table name="declarative_table">
<column xsi:type="int" name="id_column" padding="10" unsigned="true" nullable="false" comment="Entity Id"/>
<column xsi:type="int" name="severity" padding="10" unsigned="true" nullable="false" comment="Severity code"/>
<column xsi:type="varchar" name="title" nullable="false" length="255" comment="Title"/>
<column xsi:type="timestamp" name="time_occurred" padding="10" comment="Time of event"/>
<constraint xsi:type="primary" referenceId="PRIMARY">
<column name="id_column"/>
</constraint>
</table>
</schema>
然后运行这些命令// ubuntu
php bin/magento setup:upgrade && php bin/magento cache:flush && php bin/magento cache:clean
在我的例子中,package name
是错误的。用正确的包名称替换后问题得到修复。
namespace Package_Name\Module_Name\Setup;