Magento2 InstallSchema.php ne crée pas la table spécifiée

13

J'ai un InstallSchema.php qui ne crée tout simplement pas la table nécessaire dans la base de données. Le code du schéma est en jachère:

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

J'ai exécuté les commandes de jachère:

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

Aucune erreur n'a été donnée, cependant, lorsque j'arrive sur ma page, je reçois l'erreur de jachère:

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

S'il vous plaît, aidez.

Lachezar Raychev
la source
Avez-vous défini «myvendor_helpdesk_ticket» quelque part? il peut juste échouer sur l'installateur-> getTable ().
dbcn
que voulez-vous dire par définir? pouvez-vous s'il vous plaît fournir un petit exemple
Lachezar Raychev
J'ai créé un ResourceModel, où je fais app / code / MyVendor / Helpdesk / Model / ResourceModel / Ticket.php: $ this -> _ init ('myvendor_helpdesk_ticket', 'ticket_id'); Si cela le définit ... Partout ailleurs où j'ai la chaîne 'myvendor_helpdesk_ticket' est dans le code que j'ai publié
Lachezar Raychev
j'ai remplacé "-> newTable ($ installer-> getTable ('myvendor_helpdesk_ticket'))" par "-> newTable ('myvendor_helpdesk_ticket')" ... toujours rien
Lachezar Raychev
3
essayez de supprimer du tableau setup_modulel'enregistrement avecmodule = 'MyVendor_Helpdesk'
Marius

Réponses:

33

Le programme d'installation ne fonctionnera pas à nouveau s'il a déjà été exécuté.
La suppression de l'enregistrement de setup_moduleavec module = 'MyVendor_Helpdesk' devrait le relancer.

Marius
la source
Génial Marius, cela a fonctionné pour moi.
Naveenbos
10

veuillez essayer le code suivant.

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 vous obtenez des erreurs d'autorisation sur le dossier var.

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

Quelque chose que je fais souvent est de supprimer la table si elle existe sur InstallSchema.php:

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

Après cela, faites:

  1. Accédez à votre base de données
  2. Exécutez la commande suivante: DELETE FROM setup_module WHERE module = 'module_name';
  3. Quittez votre DB
  4. Dans votre dossier racine Magento, exécutez: php bin / magento setup: db-schema: upgrade
  5. Vérifiez si tout va bien dans votre table personnalisée.
Alejandro Torres
la source
0

allez simplement dans la base de données magento et supprimez d'abord la ligne de la table setup_module correspondant au nom de votre module pour qu'il réexécute le programme d'installation - #php -f bin / magento setup: upgrade

Marijan Honomihl
la source