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'을 정의 했습니까? 설치 프로그램-> getTable ()에서 실패했을 수 있습니다.
dbcn

u는 무엇을 의미합니까? 작은 예를 들어 주
시겠습니까

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'
Marius

답변:


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.