Magento 2.3: Özel modülde bildirim şeması nasıl uygulanır


Yanıtlar:


39

Her şeyden önce, db_schema.xmliçinde dosya oluşturun /RH/Helloworld/etcve aşağıdaki kodu yazın:

<?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> = "Tablo adı oluşturmak ve ayarlamak için kullan"
  • <column> .. </column> = "Tablonun oluşturma ve ayarlama sütunu için kullan"
  • <constraint> .. </constraint> = "Birincil anahtar, yabancı anahtar, benzersiz anahtar vb. Gibi ayar kısıtlaması için kullanın."

Yükseltme komutunu çalıştırmadan önce db_whitelist_schema.json, aşağıdaki komutu çalıştırarak şemanızı dosyaya eklemeniz gerekir :

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

Şimdi klasörde db_whitelist_schema.jsondosya oluşturulacak /RH/Helloworld/etc.

Şimdi koş php bin/magento s:up

Tablo veritabanı içinde oluşturulacaktır.

=> Bir sütunu yeniden adlandırmak istiyorsanız db_schema.xml, uygun sütunundaki aşağıdaki satırı ayarlamanız gerekir :

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

burada, name = "yeni sütun adı" ve onCreate = "migrateDataFrom ()" = "eski sütun adı"

=> Tabloyu bırakmak istiyorsanız, xml dosyasından tüm tablo düğümünü kaldırabilir veya devre dışı bırakılmış özniteliği aşağıdaki satırdaki gibi true olarak ayarlayabilirsiniz db_schema.xml:

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

Daha fazla ayrıntı için, buradan kontrol edebilirsiniz .

Umut, sizin için yararlı olacaktır.


1
İyi bir @Rohan
Ramkishan Suthar

Güzel açıklama ..... Çok teşekkür ederim .... Gerçekten yararlı ....
sert khandhar

Memnuniyetle yardım ettim !! Happy coding :) & Thank You @RamkishanSuthar
Rohan Hapani

Neden db_whitelist_schema.json üretmeliyiz?
Ramanathan

@RohanHapani Özel uzantı kullanarak Magento 2.3.0'da nasıl özel ürün özelliği oluşturabilirim?
Kishan Patadia

12

Herhangi bir özel modülünüzdeki etc klasörü altında db_schema.xml adlı bir dosya oluşturun .

<?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>

Şimdi aynı yolda db_whitelist_schema.json oluşturun

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

Bundan sonra sadece php bin / magento kurulumunu çalıştırın : yükseltme . Daha fazla bilgi için Buradan kontrol edebilirsiniz . Bu konuda daha fazla açıklamaya ihtiyacınız olması durumunda bana bildirin.


Ama ... bu yukarıdakiyle aynı cevap. Neden çift gönderi?
Jisse Reitsma

@JisseReitsma Yukarıda cevap önce yayınladım. her iki cevabın da kontrol zamanı.
Ramkishan Suthar

Benim hatam: Her ikiniz de orijinal gönderi yapıldıktan sonra 14 dakika içinde soruyu yanıtladı ve siz biraz daha hızlıydınız. Görünüşe göre en kısa sürede yeni bir soruya cevap vermek için spor
yapıyorsunuz

1
Cevap mükemmel. Daha fazla bilgi eklemek istiyorum: Eski yaklaşımın (InstallSchema) ana dezavantajı Magento'nun değişiklikleri körü körüne uygulamasıdır. Örneğin, bir sürümde yeni bir veritabanı sütunu eklenebilir, yalnızca bir sonraki sütunda kaldırılabilir. Deklaratif kurulum bu tür gereksiz işleri ortadan kaldırır.
HaFiz Umer

0

Magento 2.3 çekirdek modülleri, kurulum yükseltme komut dosyası yerine bildirici bir şema yaklaşımı kullandı. Bu Magento 2.3 ve üstü için önerilen yeni bir yaklaşımdır. Magento 2.3.x hala InstallSchema, InstallData, .. vb. İle çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.