Magento 2.3: कस्टम मॉड्यूल में घोषणात्मक स्कीमा को कैसे लागू किया जाए


14

मैं Magento 2.3 स्थापित करता हूं और कस्टम मॉड्यूल बना रहा हूं।

लेकिन, मुझे नहीं पता कि कैसे Magento 2.3 संस्करण में कस्टम डेटाबेस टेबल बनाया जाए।


2
डेटाबेस या Magento के डेटाबेस में कस्टम टेबल?
पवन

1
यहाँ आप
मैगेंटो

जवाबों:


39

सबसे पहले, db_schema.xmlअंदर फ़ाइल बनाएं /RH/Helloworld/etcऔर निम्नलिखित कोड लिखें:

<?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> = "तालिका नाम बनाने और सेट करने के लिए उपयोग करें"
  • <column> .. </column> = "तालिका का स्तंभ बनाएं और सेट करें के लिए उपयोग करें"
  • <constraint> .. </constraint> = "सेट की कमी के लिए उपयोग करें जैसे प्राथमिक कुंजी, विदेशी कुंजी, अद्वितीय कुंजी आदि।"

अपग्रेड कमांड चलाने से पहले आपको db_whitelist_schema.jsonनिम्न कमांड चलाकर अपने स्कीमा को फाइल में जोड़ना होगा :

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

अब, वहाँ फ़ोल्डर db_whitelist_schema.jsonमें फ़ाइल बना दिया जाएगा /RH/Helloworld/etc

अब, भागो php bin/magento s:up

तालिका डेटाबेस के अंदर बनाई जाएगी।

=> यदि आप किसी स्तंभ का नाम बदलना चाहते हैं, तो आपको अपने db_schema.xmlउपयुक्त स्तंभ में पंक्ति के नीचे सेट करना होगा :

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

यहाँ, नाम = "नया कॉलम नाम" और onCreate = "migrateDataFrom ()" = "पुराना नाम"

=> यदि आप तालिका को गिराना चाहते हैं, तो आप या तो पूरी फ़ाइल नोड को xml फ़ाइल से निकाल सकते हैं या आप अक्षम विशेषता को अपने अनुसार निम्न पंक्ति में सेट कर सकते हैं db_schema.xml:

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

अधिक जानकारी के लिए, आप यहां देख सकते हैं

आशा है, यह आपके लिए उपयोगी होगा।


1
एक अच्छा @ रोहन
रामकिशन सुथार

अच्छी व्याख्या ..... बहुत बहुत धन्यवाद .... यह वास्तव में उपयोगी है ....
कठोर खंडहर

मदद करने के लिए खुश !! हैप्पी कोडिंग :) और थैंक यू @RamkishanSuthar
रोहन हापानी

हमें db_whitelist_schema.json उत्पन्न करने की आवश्यकता क्यों है?
रामनाथन

@ रोहनपानी मैं कस्टम एक्सटेंशन का उपयोग करके Magento 2.3.0 में कस्टम उत्पाद विशेषता कैसे बना सकता हूं?
किशन पटादिया

12

अपने किसी भी कस्टम मॉड्यूल में फ़ोल्डर आदि के तहत db_schema.xml नाम की फ़ाइल बनाएँ ।

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

अब उसी पथ पर db_whitelist_schema.json बनाएं

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

उसके बाद बस php bin / magento सेटअप चलाएं : अपग्रेड करें । अधिक जानकारी के लिए आप यहां देख सकते हैं । यदि आपको इस पर अधिक स्पष्टीकरण की आवश्यकता है, तो मुझे बताएं।


लेकिन ... यह ऊपर के रूप में एक ही जवाब है। डबल पोस्ट क्यों?
जिस्से रीत्समा

@JisseReitsma मैंने उत्तर से पहले पोस्ट किया था। दोनों उत्तरों का समय चेक करें।
रामकिशन सुथार

मेरा बुरा: आप दोनों ने मूल पोस्ट किए जाने के 14 मिनट के भीतर सवाल का जवाब दिया और आप बस थोड़ा तेज थे। ऐसा लगता है कि आप लोग इसे जल्द से जल्द एक नए सवाल का जवाब देने के लिए एक खेल बना देते हैं :)
जिस्से रीटस्मा

1
उत्तर एकदम सही है। मैं कुछ जानकारी जोड़ना चाहता हूं: पुराने दृष्टिकोण (InstallSchema) का मुख्य नुकसान यह है कि मैगेंटो नेत्रहीन रूप से परिवर्तनों को लागू करता है। उदाहरण के लिए, एक संस्करण में एक नया डेटाबेस कॉलम शुरू किया जा सकता है, केवल अगले में हटाया जा सकता है। घोषणात्मक सेटअप इस प्रकार के अनावश्यक कार्य को समाप्त करता है।
हाफिज उमर

0

Magento 2.3 कोर मॉड्यूल सेटअप अपग्रेड स्क्रिप्ट के बजाय एक घोषणा स्कीमा दृष्टिकोण का उपयोग किया। यह Magento 2.3 और इसके बाद के संस्करण में एक नया अनुशंसित दृष्टिकोण है। Magento 2.3.x अभी भी InstallSchema, InstallData, .. आदि के साथ काम कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.