Magento 2.3: Cách triển khai lược đồ khai báo trong mô đun tùy chỉnh


13

Tôi cài đặt magento 2.3 và tôi đang tạo mô-đun tùy chỉnh.

Nhưng, tôi không biết cách tạo bảng cơ sở dữ liệu tùy chỉnh trong phiên bản magento 2.3.


2
cơ sở dữ liệu Hoặc bảng tùy chỉnh trong cơ sở dữ liệu Magento?
Pawan

Câu trả lời:


38

Trước hết, tạo db_schema.xmltập tin bên trong /RH/Helloworld/etcvà viết mã sau đây:

<?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> = "Sử dụng để tạo và đặt tên bảng"
  • <column> .. </column> = "Sử dụng để tạo và đặt cột của bảng"
  • <constraint> .. </constraint> = "Sử dụng để đặt ràng buộc như khóa chính, khóa ngoại, khóa duy nhất, v.v."

Trước khi chạy lệnh nâng cấp, bạn cần thêm lược đồ của mình vào db_whitelist_schema.jsontệp bằng cách chạy lệnh sau:

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

Bây giờ, có db_whitelist_schema.jsontập tin sẽ được tạo trong /RH/Helloworld/etcthư mục.

Bây giờ, chạy php bin/magento s:up

Bảng sẽ được tạo bên trong cơ sở dữ liệu.

=> Nếu bạn muốn đổi tên một cột, bạn cần đặt dòng bên dưới trong db_schema.xmlcột thích hợp của mình :

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

ở đây, name = "tên cột mới"onCreate = "MigrateDataFrom ()" = "tên cột cũ"

=> Nếu bạn muốn bỏ bảng, thì bạn có thể xóa toàn bộ nút bảng khỏi tệp xml hoặc bạn có thể đặt thuộc tính bị vô hiệu thành đúng như dòng dưới đây trong db_schema.xml:

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

Để biết thêm chi tiết, bạn có thể kiểm tra ở đây .

Hy vọng, nó sẽ hữu ích cho bạn.


1
Một người tốt @Rohan
Ramkishan Suthar

Lời giải thích tuyệt vời ..... Cảm ơn bạn rất nhiều .... Nó thực sự hữu ích ....
khandhar khắc nghiệt

Vui vẻ giúp đỡ !! Chúc mừng mã hóa :) & Cảm ơn bạn @RamkishanSuthar
Rohan Hapani

Tại sao chúng ta cần tạo db_whitelist_schema.json?
Ramanathan

@RohanHapani Làm cách nào tôi có thể tạo thuộc tính sản phẩm tùy chỉnh trong Magento 2.3.0 bằng tiện ích mở rộng tùy chỉnh?
Kishan Patadia

11

Tạo tệp có tên là db_schema.xml trong thư mục vv trong bất kỳ mô-đun tùy chỉnh nào của bạn.

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

Bây giờ hãy tạo db_whitelist_schema.json tại cùng một đường dẫn

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

Sau đó, chỉ cần chạy php bin / magento setup: nâng cấp . Để biết thêm thông tin bạn có thể kiểm tra ở đây . Hãy cho tôi biết trong trường hợp bạn cần giải thích thêm về điều này.


Nhưng ... đây là câu trả lời giống như trên. Tại sao bài đôi?
Jisse Reitsma

@JisseReitsma Tôi đã đăng trước khi trả lời. kiểm tra thời gian của cả hai câu trả lời.
Ramkishan Suthar

Xấu của tôi: Cả hai bạn đã trả lời câu hỏi trong vòng 14 phút sau khi bài viết gốc được thực hiện và bạn chỉ nhanh hơn một chút. Có vẻ như các bạn biến nó thành một môn thể thao để trả lời một câu hỏi mới càng sớm càng tốt :)
Jisse Reitsma

Câu trả lời là hoàn hảo. Tôi muốn thêm một số thông tin: Nhược điểm chính của phương pháp cũ (InstallSchema) là Magento áp dụng các thay đổi một cách mù quáng. Ví dụ, trong một phiên bản, một cột cơ sở dữ liệu mới có thể được giới thiệu, chỉ được xóa trong phần tiếp theo. Thiết lập khai báo loại bỏ loại công việc không cần thiết này.
HaFiz Umer


0

Các mô-đun lõi Magento 2.3 đã sử dụng một cách tiếp cận lược đồ khai báo thay vì tập lệnh nâng cấp thiết lập. Đây là một cách tiếp cận mới được đề xuất trong Magento 2.3 trở lên. Magento 2.3.x vẫn hoạt động với InstallSchema, InstallData, .. vv

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.