Magento 2.3: Bagaimana menerapkan skema deklaratif dalam modul khusus

Jawaban:

39

Pertama-tama, buat db_schema.xmlfile di dalamnya /RH/Helloworld/etcdan tulis kode berikut:

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld">
        <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="ID"/>
        <column xsi:type="varchar" name="author_name" nullable="false" length="25" comment="Name"/>
        <column xsi:type="varchar" name="email" nullable="false" length="25" comment="Email"/>
        <column xsi:type="varchar" name="description" nullable="false" length="255" comment="Descrition"/>
        <constraint xsi:type="primary" referenceId="PRIMARY">
            <column name="id"/>
        </constraint>
    </table>
</schema>
  • <table> .. </table> = "Gunakan untuk membuat dan mengatur nama tabel"
  • <column> .. </column> = "Gunakan untuk membuat dan mengatur kolom tabel"
  • <constraint> .. </constraint> = "Gunakan untuk batasan yang disetel seperti kunci primer, kunci asing, kunci unik dll."

Sebelum menjalankan perintah peningkatan, Anda perlu menambahkan skema Anda ke db_whitelist_schema.jsonfile dengan menjalankan perintah berikut:

php bin/magento setup:db-declaration:generate-whitelist --module-name=RH_Helloworld

Sekarang, ada db_whitelist_schema.jsonfile yang akan dibuat di /RH/Helloworld/etcfolder.

Sekarang, jalankan php bin/magento s:up

Tabel akan dibuat di dalam basis data.

=> Jika Anda ingin mengganti nama kolom, Anda perlu mengatur baris di bawah ini di db_schema.xmlkolom yang sesuai:

<column xsi:type="varchar" name="customer_email" onCreate="migrateDataFrom(email)" on_update="false" nullable="false" default="" comment="Customer Email"/>

di sini, nama = "nama kolom baru" dan onCreate = "migrateDataFrom ()" = "nama kolom lama"

=> Jika Anda ingin menjatuhkan tabel, maka Anda dapat menghapus seluruh simpul tabel dari file xml atau Anda dapat mengatur atribut yang dinonaktifkan menjadi benar seperti di bawah baris di db_schema.xml:

<table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld" disabled="true">
 ..
 </table>

Untuk lebih jelasnya, Anda bisa memeriksanya di sini .

Semoga bermanfaat bagi Anda.

Rohan Hapani
sumber
1
Bagus @Rohan
Ramkishan Suthar
Penjelasan yang bagus ..... Terima kasih banyak .... Sangat membantu ....
harsh khandhar
Senang membantu !! Selamat coding :) & Terima kasih @RamkishanSuthar
Rohan Hapani
Mengapa kita perlu membuat db_whitelist_schema.json?
Ramanathan
@RohanHapani Bagaimana saya bisa membuat atribut produk khusus di Magento 2.3.0 menggunakan ekstensi khusus?
Kishan Patadia
12

Buat file bernama db_schema.xml di bawah folder dll di setiap modul kustom Anda.

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="books_data" resource="default" engine="innodb" comment="Book Table">
        <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="BOOK ID"/>
        <column xsi:type="varchar" name="book_name" nullable="false" length="255" comment="Book Name"/>
        <column xsi:type="int" name="author" unsigned="true" nullable="true" identity="false" default="" comment="Author"/>
        <column xsi:type="varchar" name="isbn_no" nullable="true" comment="ISBN No"/>
        <column xsi:type="timestamp" name="publish_date" on_update="false" nullable="false" default="CURRENT_TIMESTAMP"
                comment="Publish Date"/>
      <column xsi:type="varchar" name="language" nullable="true" comment="Language"/>
         <column xsi:type="decimal" name="mrp" scale="4" precision="12" unsigned="false" nullable="false"
                default="0" comment="MRP"/>
        <constraint xsi:type="primary" name="PRIMARY">
            <column name="id"/>
        </constraint>
    </table>

    <table name="author_data" resource="default" engine="innodb" comment="Author Table">
        <column xsi:type="smallint" name="id" padding="6" unsigned="false" nullable="false" identity="true" comment="Author ID"/>
        <column xsi:type="varchar" name="author_name" nullable="false" length="255" comment="Author Name"/>
        <column xsi:type="varchar" name="author_email" nullable="false" length="255" comment="Author Email"/>
        <column xsi:type="varchar" name="affliation" nullable="false" length="255" comment="Affliation"/>
        <column xsi:type="int" name="age" unsigned="true" nullable="true" identity="false" default="" comment="Age"/>
        <constraint xsi:type="primary" name="PRIMARY">
            <column name="id"/>
        </constraint>
    </table>
</schema>

Sekarang buat db_whitelist_schema.json di jalur yang sama

php bin/magento setup:db-declaration:generate-whitelist --module-name=Vendor_Module

Setelah itu baru jalankan setup php bin / magento: upgrade . Untuk informasi lebih lanjut, Anda dapat memeriksa Di Sini . Beritahu saya jika Anda membutuhkan penjelasan lebih lanjut tentang ini.

Ramkishan Suthar
sumber
Tapi ... ini jawaban yang sama seperti di atas. Mengapa pos ganda?
Jisse Reitsma
@JisseReitsma saya memposting sebelum jawaban di atas. periksa waktu kedua jawaban.
Ramkishan Suthar
Buruk saya: Anda berdua menjawab pertanyaan dalam waktu 14 menit setelah posting asli dibuat dan Anda hanya sedikit lebih cepat. Sepertinya kalian menjadikannya olahraga untuk menjawab pertanyaan baru secepat mungkin :)
Jisse Reitsma
1
Jawabannya sempurna. Saya ingin menambahkan beberapa informasi lebih lanjut: Kerugian utama dari pendekatan lama (InstallSchema) adalah Magento menerapkan perubahan secara membabi buta. Misalnya, dalam satu versi kolom database baru mungkin diperkenalkan, hanya untuk dihapus di versi berikutnya. Setup deklaratif menghilangkan jenis pekerjaan yang tidak perlu ini.
HaFiz Umer
0

Modul inti Magento 2.3 menggunakan pendekatan skema deklaratif alih-alih skrip upgrade pengaturan. Ini adalah pendekatan yang direkomendasikan baru di Magento 2.3 dan di atas. Magento 2.3.x masih bekerja dengan InstallSchema, InstallData, .. dll.

Mark Henry
sumber