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
Suresh Chikani
sumber
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

Praful Rajput
sumber
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

Sheshgiri Anvekar
sumber