Magento2: Cara memperbarui skema basis data


29

Saya sedang mengerjakan modul khusus magento, dalam modul ada Setup\InstallSchema.phpfile yang sudah diinstal sebelumnya. saya telah menambahkan beberapa bidang database lagi InstallSchema.phpjadi saya ingin memperbarui struktur tabel tetapi tabel belum menerapkan perubahan apa pun.

Bagaimana saya bisa menerapkan perubahan skema ke tabel database?

Saya memiliki perintah proses cli untuk memperbarui skema tetapi tidak berhasil.

php bin/magento setup:db-schema:upgrade

dan

php bin/magento setup:upgrade

Anda dapat menghapus dengan "modul bin n / magento: copot" dan pasang kembali ekstensi Anda. Hal lain untuk memeriksa itu UpgradeSchema.php seperti github.com/magento/magento2/commit/… Sepertinya saat ini di sini tidak ada penjelasan bagaimana cara meng-upgrade basis data, jadi saya juga menantikan jawaban yang benar di sini
FireBear

@FireBear appy di bawah kode jawaban?
Suresh Chikani

belum mencoba, tetapi terlihat benar sesuai dengan sampel dari modul inti Katalog github.com/magento/magento2/blob/…
FireBear

Sebagian besar waktu, kesalahan berasal dari tidak memiliki namespace yang ditentukan untuk kelas. Periksa apakah Anda telah menetapkan namespace untuk kelas Anda.
soukaina

Jawaban:


48

Jika Anda ingin menambahkan lebih banyak kolom ke dalam tabel modul yang ada, Anda dapat melakukan hal berikut.

Langkah 1: Buat UpgradeSchema.php di bawah folder Pengaturan. Dapatkan Ide dari kode berikut.

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

Langkah 2: Ubah setup_versionnilainya menjadimodule.xml

Langkah 3: Jalankan php bin/magento setup:upgradeperintah dari CLI


1
dapatkah Anda menjelaskan bagaimana cara menambahkan kunci primer menggunakan skrip pemutakhiran? di meja saya ada 'customer_id' tetapi bukan primary key sekarang saya ingin menambahkannya sebagai primary key.
Suresh Chikani

Ya, Anda dapat mengubahnya menggunakan fungsi ubahColumnByDdl (). Berikut ini adalah skema. `function publik memodifikasiColumn ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null);`
Praful Rajput

Bagaimana saya bisa menerapkan bidang 'custome_id' sebagai kunci utama? jelaskan kode exanple.
Suresh Chikani

Bisakah Anda Tambahkan "Bagaimana kami dapat memodifikasi jenis kolom yang ada?" dalam pertanyaan Anda?
Praful Rajput

3
@Keyur Shah, Anda tidak perlu membuat file M2 baru. Anda harus memasukkan kode berikut ke dalam UpgradeSchema.php dan memperbarui setup_version ke module.xml juga. if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// kode Anda} if (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / your code}
Praful Rajput

2

Untuk memutakhirkan Skema Pemasang, Anda harus menulis 'UpgradeSchema.php',

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

Langkah 2: Dalam modul Anda, Anda akan menemukan module.xml di dalam folder dll dalam file yang mengubah nilai setup_version (mis: 1.0.1 ke 1.0.2) nilai versi harus lebih tinggi daripada nilai versi saat ini.

Langkah 3: Jalankan setup php bin / magento: perintah upgrade dari CLI

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.