Magento 2 InstallSchema方法未执行

时间:2018-07-20 11:04:23

标签: database magento module magento2

在我自己的Magento 2定制模块上,我想安装一个定制数据库表。这是InstallSchema类代码:

FAILURE: Build failed with an exception.

* Where:
Build file '/home/pompei/IdeaProjects/greetgo.depinject/greetgo.depinject.gradle/build/test_projects/pr-20180720-164840-381-109260619/test/build.gradle' line: 3

* What went wrong:
An exception occurred applying plugin request [id: 'kz.greetgo.depinject.plugin']
> Failed to apply plugin [id 'kz.greetgo.depinject.plugin']
   > Could not get unknown property 'sourceSets' for root project 'test' of type org.gradle.api.Project.

但是未执行install方法。

  1. 在函数内部附加了带有断点的xdebug会话,从未调用过。

  2. 删除了setup_module数据库表中的模块行,然后重新运行<?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(); } }

  3. 设置开发人员模式,禁用缓存,运行bin/magento setup:upgrade,仍然失败。

有什么想法吗? 我还尝试过使用UpdateSchema更改模块版本,但不走运。

我在Ubuntu Server虚拟机上运行Magento 2。文件夹权限设置正确。

4 个答案:

答案 0 :(得分:1)

在我的情况下,package name是错误的。用正确的软件包名称替换后,问题已修复。

namespace Package_Name\Module_Name\Setup;

答案 1 :(得分:0)

请在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文件中定义了正确的安装版本

答案 2 :(得分:0)

找到了解决方案。它是module.xml文件中的模块名称。 setup:upgrade安装程序会在区分大小写的文件夹路径中搜索InstallSchema,因此如果将模块声明为

my_module

它将在MyVendor / my / module / Setup文件夹中搜索。

我将名称替换为:

MyModule

因此安装程序将在MyVendor / MyModule / Setup文件夹中正确搜索。

通过将日志消息放在Magento设置文件夹的Install.php文件中,我发现了“旧方式”的问题。

答案 3 :(得分:0)

@wildchild非常适合与其他解决方案一起使用。在您的问题中,您没有提到使用的是2.2。*还是2.3。*,您只是说过Magento 2。

从一台服务器移到另一台服务器并从2.2升级到2.3后,我遇到了相同的问题,我的自定义模块停止工作,PHP脚本未在数据库中创建表。

后来我发现Magento改变了音乐,现在您必须使用声明性架构结构 Module_Vendor/Module_Name/etc/db_schema.xml文件声明了模块的数据库结构。

请参见下面的示例,您应该read more here

创建表格

以下示例创建具有四列的declarative_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