Magento 2.3: วิธีการนำ schema ที่เปิดเผยไปใช้ในโมดูลที่กำหนดเอง


14

ฉันติดตั้ง magento 2.3 และฉันกำลังสร้างโมดูลที่กำหนดเอง

แต่ฉันไม่รู้วิธีสร้างตารางฐานข้อมูลที่กำหนดเองใน magento 2.3


2
ฐานข้อมูลหรือตารางที่กำหนดเองในฐานข้อมูล Magento?
Pawan

1
ที่นี่คุณสามารถมีความคิดเพิ่มเติมเกี่ยวกับการสร้างตารางโดยใช้ Declarative Schema ใน Magento 2.3
Rohit Kundale

คำตอบ:


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> = "ใช้สำหรับการกำหนดข้อ จำกัด เช่นเดียวกับคีย์หลัก, foreign key, คีย์เฉพาะเป็นต้น"

ก่อนที่จะรันคำสั่งอัพเกรดคุณต้องเพิ่มสคีมาของคุณไปยัง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"/>

ที่นี่name = "ชื่อคอลัมน์ใหม่"และonCreate = "migrateDataFrom ()" = "ชื่อคอลัมน์เก่า"

=> หากคุณต้องการวางตารางจากนั้นคุณสามารถลบโหนดตารางทั้งหมดออกจากไฟล์ xml หรือคุณสามารถตั้งค่าแอททริบิวต์ที่ปิดใช้งานให้เป็นจริงเช่นเดียวกับบรรทัดด้านล่างในของคุณdb_schema.xml:

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

สำหรับรายละเอียดเพิ่มเติมคุณสามารถตรวจสอบที่นี่

หวังว่ามันจะเป็นประโยชน์สำหรับคุณ


1
Good one @Rohan
Ramkishan Suthar

คำอธิบายที่ดี ..... ขอบคุณมาก .... มันมีประโยชน์จริงๆ ....
harsh khandhar

เต็มใจช่วย !! Happy coding :) & Thank You @RamkishanSuthar
Rohan Hapani

ทำไมเราต้องสร้าง db_whitelist_schema.json
Ramanathan

@RohanHapani ฉันจะสร้างแอตทริบิวต์ผลิตภัณฑ์ที่กำหนดเองใน Magento 2.3.0 โดยใช้ส่วนขยายที่กำหนดเองได้อย่างไร
Kishan Patadia

12

สร้างไฟล์ชื่อdb_schema.xmlภายใต้โฟลเดอร์ etc ในโมดูลที่กำหนดเองของคุณ

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

หลังจากที่ทำงานเพียงแค่ติดตั้ง bin / วีโอไอพี PHP: การอัพเกรด สำหรับข้อมูลเพิ่มเติมคุณสามารถตรวจสอบที่นี่ แจ้งให้เราทราบในกรณีที่คุณต้องการคำอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้


แต่ ... นี่เป็นคำตอบเดียวกับข้างบน ทำไมต้องโพสต์คู่
Jisse Reitsma

@JisseReitsma ฉันโพสต์ก่อนคำตอบข้างต้น ตรวจสอบเวลาของทั้งสองคำตอบ
Ramkishan Suthar

ไม่ดีของฉัน: คุณทั้งคู่ตอบคำถามภายใน 14 นาทีหลังจากโพสต์ต้นฉบับถูกสร้างขึ้นและคุณก็เร็วขึ้นเล็กน้อย ดูเหมือนว่าพวกคุณทำให้มันเป็นกีฬาที่จะตอบคำถามใหม่โดยเร็วที่สุดเท่าที่เป็นไปได้ :)
Jisse Reitsma

1
คำตอบนั้นสมบูรณ์แบบ ฉันต้องการเพิ่มข้อมูลเพิ่มเติม: ข้อเสียเปรียบหลักของแนวทางแบบเก่า (InstallSchema) คือ Magento ใช้การเปลี่ยนแปลงแบบสุ่มสี่สุ่มห้า ตัวอย่างเช่นในหนึ่งเวอร์ชันอาจมีการแนะนำคอลัมน์ฐานข้อมูลใหม่เฉพาะในการลบออกในครั้งถัดไป การตั้งค่าแบบเปิดเผยช่วยลดงานที่ไม่จำเป็นประเภทนี้
HaFiz Umer

0

Magento 2.3 core modules ใช้วิธี schema ที่เปิดเผยได้แทนที่จะเป็นสคริปต์อัพเกรดการตั้งค่า นี่เป็นวิธีการใหม่ที่แนะนำใน Magento 2.3 ขึ้นไป Magento 2.3.x ยังคงทำงานกับ InstallSchema, InstallData, .. เป็นต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.