Magento2: Cómo actualizar el esquema de la base de datos

29

Estoy trabajando en el módulo personalizado de magento, en el módulo tengo un Setup\InstallSchema.phparchivo que se instala antes. He agregado algunos campos de base de datos más, InstallSchema.phpasí que quiero actualizar la estructura de la tabla, pero la tabla no ha aplicado ningún cambio.

¿Cómo puedo aplicar cambios de esquema a la tabla de la base de datos?

Tengo comandos cli de proceso para actualizar el esquema pero no el éxito.

php bin/magento setup:db-schema:upgrade

y

php bin/magento setup:upgrade
Suresh Chikani
fuente
Puede desinstalar con el "módulo php bin / magento: desinstalar" e instalar su extensión nuevamente. Otro punto para verificar es UpgradeSchema.php como github.com/magento/magento2/commit/… Parece que en este momento aquí no hay una explicación clara de cómo actualizar la base de datos, por lo que también espero una respuesta correcta aquí
FireBear
@FireBear appy debajo del código de respuesta?
Suresh Chikani
no lo intente todavía, pero se ve correcto según la muestra del módulo central del catálogo github.com/magento/magento2/blob/…
FireBear
La mayoría de las veces, el error proviene de no tener un espacio de nombres definido para la clase. Verifique que haya definido un espacio de nombres para su clase.
soukaina

Respuestas:

48

Si desea agregar más columnas en la tabla existente de su módulo, puede hacer lo siguiente.

Paso 1: Crear UpgradeSchema.php en la carpeta de configuración. Obtenga Idea del siguiente 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();
    }
}

Paso 2: cambie el setup_versionvalor enmodule.xml

Paso 3: ejecutar el php bin/magento setup:upgradecomando desde la CLI

Rajput orante
fuente
1
¿Puedes explicar cómo puedo agregar la clave principal usando el script de actualización? en mi tabla tengo 'customer_id' pero no es la clave principal ahora quiero agregarlo como clave principal.
Suresh Chikani
Sí, puede cambiarlo usando la función modifyColumnByDdl (). El siguiente es el esquema. `public function modifyColumn ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null);`
Praful Rajput
¿Cómo puedo aplicar el campo 'custome_id' como clave primaria? explica el código exanple.
Suresh Chikani
¿Puede agregar "Cómo podemos modificar el tipo de columna existente?" en tu pregunta?
Praput Rajput
3
@Keyur Shah, no necesita crear un nuevo archivo M2. Debe poner el siguiente código en UpgradeSchema.php y actualizar setup_version en module.xml también. if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// you code} if (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / your code}
Praful Rajput
2

Para actualizar el esquema del instalador, debe escribir 'UpgradeSchema.php',

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

Paso 2: En su módulo, encontrará module.xml dentro de la carpeta, etc., en ese archivo, el valor de la versión del valor de configuración de cambio (ej .: 1.0.1 a 1.0.2) debe ser mayor que el valor de la versión actual.

Paso 3: Ejecute la configuración de php bin / magento: comando de actualización desde la CLI

Sheshgiri Anvekar
fuente