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

คุณหมายถึงอะไรโดยกำหนด? คุณช่วยยกตัวอย่างเล็ก ๆ ได้
ไหม

ฉันสร้าง ResourceModel ที่ซึ่งฉันทำ app / code / MyVendor / Helpdesk / Model / ResourceModel / Ticket.php: $ 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

โปรแกรมติดตั้งจะไม่ทำงานอีกครั้งหากมีการดำเนินการแล้ว
การลบบันทึกออกจากsetup_moduleด้วย module = 'MyVendor_Helpdesk' ควรทำให้มันทำงานอีกครั้ง


Marius ยอดเยี่ยมมันใช้งานได้สำหรับฉัน
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. เข้าถึงฐานข้อมูลของคุณ
  2. เรียกใช้คำสั่งต่อไปนี้: ลบจาก setup_module WHERE module = 'module_name';
  3. ออกจากฐานข้อมูลของคุณ
  4. ในโฟลเดอร์ Magento Root ของคุณดำเนินการ: php bin / magento setup: db-schema: upgrade
  5. ตรวจสอบว่าทุกอย่างตกลงในตารางที่กำหนดเองของคุณ

0

เพียงไปที่ฐานข้อมูลวีโอไอพีและลบแถวออกจากตาราง setup_module ที่ตรงกับชื่อของโมดูลที่ควรรัน InstallSchema อีกครั้ง - #php -f bin / magento setup: อัพเกรด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.