Magento2: Como atualizar o esquema do banco de dados

29

Eu estou trabalhando no módulo personalizado magento, no módulo tem Setup\InstallSchema.phparquivo que é instalado antes. Eu adicionei mais alguns campos no banco de dados, por InstallSchema.phpisso quero atualizar a estrutura da tabela, mas a tabela não aplicou nenhuma alteração.

Como posso aplicar alterações de esquema na tabela do banco de dados?

Eu tenho comandos de processo cli para atualizar o esquema, mas não o sucesso.

php bin/magento setup:db-schema:upgrade

e

php bin/magento setup:upgrade
Suresh Chikani
fonte
Você pode desinstalar com "php bin / magento module: uninstall" e instalar sua extensão novamente. Outro ponto para verificar o UpgradeSchema.php como github.com/magento/magento2/commit/… Parece que, neste momento, não há uma explicação clara de como atualizar o banco de dados, então também estou ansioso para corrigir a resposta aqui
FireBear
@FireBear appy abaixo do código de resposta?
Suresh Chikani
não tentar ainda, mas parece correto de acordo com a amostra do módulo central Catálogo github.com/magento/magento2/blob/...
FireBear
Na maioria das vezes, o erro vem de não ter um espaço para nome definido para a classe. Verifique se você definiu um espaço para nome para sua classe.
soukaina

Respostas:

48

Se você quiser adicionar mais colunas à tabela existente do seu módulo, faça o seguinte.

Etapa 1: Crie UpgradeSchema.php na pasta Setup. Obtenha Idea do seguinte código.

namespace Vendor\ModuleName\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class UpgradeSchema implements  UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup,
                            ModuleContextInterface $context){
        $setup->startSetup();
        if (version_compare($context->getVersion(), '1.0.1') < 0) {

            // Get module table
            $tableName = $setup->getTable('table_name');

            // Check if the table already exists
            if ($setup->getConnection()->isTableExists($tableName) == true) {
                // Declare data
                $columns = [
                    'imagename' => [
                        'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                        'nullable' => false,
                        'comment' => 'image name',
                    ],
                ];

                $connection = $setup->getConnection();
                foreach ($columns as $name => $definition) {
                    $connection->addColumn($tableName, $name, $definition);
                }

            }
        }

        $setup->endSetup();
    }
}

Etapa 2: altere o setup_versionvalor emmodule.xml

Etapa 3: executar o php bin/magento setup:upgradecomando da CLI

Praful Rajput
fonte
1
você pode explicar como posso adicionar a chave primária usando o script de atualização? na minha tabela tem 'customer_id', mas não é a chave primária agora eu quero adicioná-lo como chave primária.
Suresh Chikani
Sim, você pode alterá-lo usando a função modifyColumnByDdl (). A seguir está o esquema. `` public function modifyColumn ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null); `
Praful Rajput
Como posso aplicar o campo 'custome_id' como chave primária? explicar código de exemplo.
Suresh Chikani
Você pode adicionar "Como podemos modificar o tipo de coluna existente?" na sua pergunta?
Praful Rajput
3
@Keyur Shah, você não precisa criar um novo arquivo M2. Você deve inserir o código a seguir em UpgradeSchema.php e atualizar setup_version em module.xml. if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// codifica} if (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / your code}
Praful Rajput
2

Para atualizar o esquema do instalador, você deve escrever 'UpgradeSchema.php',

exemplo de UpgradeSchema.php:

namespace <namespace>\<modulename>\Setup;

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

/**
* @codeCoverageIgnore
*/
class UpgradeSchema implements UpgradeSchemaInterface
{
    /**
 * {@inheritdoc}
 */
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
    $installer = $setup;

    $installer->startSetup();

    /*your code here*/

    $installer->endSetup();
}
}

Etapa 2: No seu módulo, você encontrará module.xml dentro da pasta etc nesse arquivo, altere o valor da versão setup_version (ex: 1.0.1 a 1.0.2) o valor da versão deve ser maior que o valor da versão atual.

Etapa 3: Execute o comando php bin / magento setup: upgrade a partir da CLI

Sheshgiri Anvekar
fonte