Magento 2.3 : 사용자 정의 모듈에서 선언적 스키마를 구현하는 방법


14

magento 2.3을 설치하고 맞춤 모듈을 만들고 있습니다.

그러나 magento 2.3 버전에서 사용자 지정 데이터베이스 테이블을 만드는 방법을 모르겠습니다.


2
Magento 데이터베이스의 데이터베이스 또는 사용자 정의 테이블?
Pawan

답변:


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> = "기본 키, 외래 키, 고유 키 등의 제약 조건 설정에 사용"

upgrade 명령을 실행하기 전에 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 파일에서 전체 테이블 노드를 제거하거나 다음에서 아래 행과 같이 disabled 속성을 true로 설정할 수 있습니다 db_schema.xml.

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

자세한 내용은 여기확인하십시오 .

희망, 그것은 당신에게 도움이 될 것입니다.


1
좋은 사람 @ Rohan
Ramkishan Suthar

니스 설명 ..... .... 정말 도움이됩니다 .... 정말 감사합니다
거친 khandhar

도와 줄 수있어서 기뻐 !! 행복한 코딩 :) & 감사합니다 @ RamkishanSuthar
로한 하 파니

왜 db_whitelist_schema.json을 생성해야합니까?
Ramanathan

@RohanHapani 사용자 정의 확장을 사용하여 Magento 2.3.0에서 사용자 정의 제품 속성을 작성하는 방법
Kishan Patadia

12

사용자 정의 모듈의 etc 폴더에 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 setup : upgrade를 실행하십시오 . 자세한 내용은 여기 를 확인하십시오 . 이에 대한 추가 설명이 필요한 경우 알려주세요.


그러나 ... 이것은 위와 같은 대답입니다. 왜 더블 포스트?
Jisse Reitsma

@JisseReitsma 위의 답변 전에 게시했습니다. 두 답변의 시간을 확인하십시오.
Ramkishan Suthar

내 나쁜 점 : 두 분 모두 원래 게시물을 작성한 후 14 분 이내에 질문에 답변했으며 조금 더 빨랐습니다. 그것은 당신이 가능한 한 빨리 새로운 질문에 대답하는 스포츠로 만드는 것 같습니다 :)
Jisse Reitsma

1
대답은 완벽합니다. 더 많은 정보를 추가하고 싶습니다 : 기존 접근법 (InstallSchema)의 주요 단점은 Magento가 변경 사항을 맹목적으로 적용한다는 것입니다. 예를 들어, 한 버전에서는 새 데이터베이스 열이 도입되어 다음 버전에서만 제거 될 수 있습니다. 선언적 설정은 이러한 유형의 불필요한 작업을 제거합니다.
HaFiz Umer

0

Magento 2.3 핵심 모듈은 설정 업그레이드 스크립트 대신 선언적 스키마 접근 방식을 사용했습니다. 이것은 Magento 2.3 이상에서 권장되는 새로운 접근 방식입니다. Magento 2.3.x는 여전히 InstallSchema, InstallData 등에서 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.