Magento2 InstallSchema.phpは指定されたテーブルを作成しません


13

データベースに必要なテーブルを作成しないInstallSchema.phpがあります。スキーマのコードは次のとおりです。

<?php

namespace MyVendor\Helpdesk\Setup;

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

/**
*   @codeCoverageIgnore
*/
class InstallSchema implements InstallSchemaInterface
{
    public function install(SchemaSetupInterface    $setup, 
                            ModuleContextInterface  $context)
    {
        $installer = $setup;
        $installer->startSetup();
        $table = $installer->getConnection()
                            ->newTable($installer->getTable('myvendor_helpdesk_ticket'))
                            ->addColumn(
                                    'ticket_id',
                                    \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                                    null,
                                    ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
                                    'Ticket Id'
                            )
                            ->addColumn(
                                    'customer_id',
                                    \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                                    null,
                                    ['unsigned' =>  true],
                                    'Customer Id'
                            )
                            ->addColumn(
                                    'title',
                                    \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                                    null,
                                    ['nullable' =>  false],
                                    'Title'
                            )
                            ->addColumn(
                                    'severity',
                                    \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
                                    null,
                                    ['nullable' =>  false],
                                    'Severity'
                            )
                            ->addColumn(
                                    'created_at',
                                    \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
                                    null,
                                    ['nullable' =>  false],
                                    'Created At'
                            )
                            ->addColumn(
                                    'status',
                                    \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
                                    null,
                                    ['nullable' =>  false],
                                    'Status'
                            )
                            ->addIndex(
                                    $installer->getIdxName('myvendor_helpdesk_ticket',  ['customer_id']),
                                    ['customer_id']
                            )
                            ->addForeignKey(
                                    $installer->getFkName('myvendor_helpdesk_ticket', 'customer_id', 'customer_entity', 'entity_id'),
                                    'customer_id',
                                    $installer->getTable('customer_entity'),
                                    'entity_id',
                                    \Magento\Framework\DB\Ddl\Table::ACTION_SET_NULL
                            )
                            ->setComment('myvendor  Helpdesk Ticket');
        $installer->getConnection()->createTable($table);
        $installer->endSetup();
    }
}

次のコマンドを実行しました。

php bin/magento setup:upgrade
php bin/magento setup:db-schema:upgrade

エラーは表示されませんでしたが、ページにアクセスすると、次のエラーが表示されます。

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'magento.myvendor_helpdesk_ticket' doesn't exist

助けてください。


「myvendor_helpdesk_ticket」をどこかに定義しましたか?installer-> getTable()で失敗しているだけかもしれません。
dbcn 2016

定義するとはどういう意味ですか?小さな例を教えてください
Lachezar Raychev

app / code / MyVendor / Helpdesk / Model / ResourceModel / Ticket.phpを作成するResourceModelを作成しました。$ this-> _ init( 'myvendor_helpdesk_ticket'、 'ticket_id'); それがそれを定義しているなら... 'myvendor_helpdesk_ticket'文字列がある他のすべての場所は、私が投稿したコードにあります
Lachezar Raychev

「-> newTable($ installer-> getTable( 'myvendor_helpdesk_ticket'))」を「-> newTable( 'myvendor_helpdesk_ticket')」に置き換えました...それでも何もありません
Lachezar Raychev

3
テーブルsetup_moduleからレコードを削除してみてくださいmodule = 'MyVendor_Helpdesk'
マリウス

回答:


33

すでに実行されている場合、インストーラーは再度実行されません。module = 'MyVendor_Helpdesk'を使用して
レコードを削除すると、setup_module再度実行されるはずです。


素晴らしいマリウスは私のために働いています。
Naveenbos

10

次のコードを試してください。

delete from setup_module where  module ='module_name';
sudo bin/magento setup:upgrade
sudo bin/magento setup:di:compile
sudo bin/magento cache:clean

varフォルダーで権限エラーが発生した場合。

sudo chmod -R 777 var/*

1

InstallSchema.phpに存在する場合、私がよく行うことはテーブルをドロップすることです:

public function install(SchemaSetupInterface $setup, ModuleContextInterface $context){
    $setup->startSetup();
    // Drop table for development purpose
    $setup->getConnection()->dropTable($setup->getTable('my_custom_table')); ...

この後:

  1. DBにアクセスする
  2. 次のコマンドを実行します。DELETE FROM setup_module WHERE module = 'module_name';
  3. DBを終了します
  4. Magentoのルートフォルダーで、php bin / magento setup:db-schema:upgradeを実行します。
  5. カスタムテーブルに問題がないかどうかを確認します。

0

magentoデータベースに移動し、最初にモジュールの名前と一致するsetup_moduleテーブルから行を削除します。モジュールの名前は、InstallSchemaを再度実行する必要があります-#php -f bin / magento setup:upgrade

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.