InstallSchema.php de Magento2 no crea la tabla especificada

13

Tengo un InstallSchema.php que simplemente no crea la tabla necesaria en la base de datos. El código del esquema es de barbecho:

<?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();
    }
}

He ejecutado los siguientes comandos:

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

No se dieron errores, sin embargo, cuando llego a mi página recibo el siguiente error:

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

Por favor ayuda.

Lachezar Raychev
fuente
¿Definió 'myvendor_helpdesk_ticket' en alguna parte? puede estar fallando en el instalador-> getTable ().
dbcn
¿Qué quieres decir con definir? ¿podría dar un pequeño ejemplo
Lachezar Raychev
Creé un ResourceModel, donde hago app / code / MyVendor / Helpdesk / Model / ResourceModel / Ticket.php: $ this -> _ init ('myvendor_helpdesk_ticket', 'ticket_id'); Si eso lo define ... En todas partes donde tengo la cadena 'myvendor_helpdesk_ticket' está en el código que
publiqué
reemplacé "-> newTable ($ installer-> getTable ('myvendor_helpdesk_ticket'))" con "-> newTable ('myvendor_helpdesk_ticket')" ... todavía nada
Lachezar Raychev
3
intente eliminar de la tabla setup_moduleel registro conmodule = 'MyVendor_Helpdesk'
Marius

Respuestas:

33

El instalador no se ejecutará nuevamente si ya se ejecutó.
Eliminar el registro de setup_modulecon module = 'MyVendor_Helpdesk' debería hacer que vuelva a ejecutarse.

Marius
fuente
Impresionante Marius, me funcionó.
Naveenbos
10

por favor intente el siguiente código.

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

si obtiene algún error de permisos en la carpeta var.

sudo chmod -R 777 var/*
Liz Eipe C
fuente
1

Algo que a menudo hago es soltar la tabla si existe en InstallSchema.php:

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

Después de esto hacer:

  1. Acceda a su base de datos
  2. Ejecute el siguiente comando: DELETE FROM setup_module WHERE module = 'module_name';
  3. Salga de su base de datos
  4. En su carpeta raíz de Magento, ejecute: php bin / magento setup: db-schema: upgrade
  5. Compruebe si todo está bien en su tabla personalizada.
Alejandro Torres
fuente
0

simplemente vaya a la base de datos de magento y primero elimine la fila de la tabla setup_module que coincida con el nombre de su módulo para que luego vuelva a ejecutar InstallSchema - #php -f bin / magento setup: upgrade

Marijan Honomihl
fuente