Eu instalo o magento 2.3 e estou criando um módulo personalizado.
Mas não sei como criar uma tabela de banco de dados personalizada na versão magento 2.3.
Eu instalo o magento 2.3 e estou criando um módulo personalizado.
Mas não sei como criar uma tabela de banco de dados personalizada na versão magento 2.3.
Respostas:
Primeiro, crie o db_schema.xml
arquivo dentro /RH/Helloworld/etc
e escreva o seguinte código:
<?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>
= "Use para criar e definir o nome da tabela"<column> .. </column>
= "Use para criar e definir coluna da tabela"<constraint> .. </constraint>
= "Use para definir a restrição como chave primária, chave estrangeira, chave exclusiva etc."Antes de executar o comando upgrade, você precisa adicionar seu esquema ao db_whitelist_schema.json
arquivo executando o seguinte comando:
php bin/magento setup:db-declaration:generate-whitelist --module-name=RH_Helloworld
Agora, existem db_whitelist_schema.json
arquivos serão criados na /RH/Helloworld/etc
pasta.
Agora corra php bin/magento s:up
A tabela será criada dentro do banco de dados.
=> Se você deseja renomear uma coluna, defina a linha abaixo na db_schema.xml
coluna apropriada:
<column xsi:type="varchar" name="customer_email" onCreate="migrateDataFrom(email)" on_update="false" nullable="false" default="" comment="Customer Email"/>
aqui, nome = "novo nome da coluna" e onCreate = "migrateDataFrom ()" = "nome antigo da coluna"
=> Se você desejar descartar a tabela, poderá remover todo o nó da tabela do arquivo xml ou definir o atributo desativado como true, como abaixo da linha do seu db_schema.xml
:
<table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld" disabled="true">
..
</table>
Para mais detalhes, você pode conferir aqui .
Espero que seja útil para você.
Crie um arquivo nomeado como db_schema.xml na pasta etc em qualquer módulo customizado.
<?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>
Agora crie db_whitelist_schema.json no mesmo caminho
php bin/magento setup:db-declaration:generate-whitelist --module-name=Vendor_Module
Depois disso, execute o php bin / magento setup: upgrade . Para mais informações, você pode conferir aqui . Entre em contato caso precise de mais explicações sobre isso.
Os módulos principais do Magento 2.3 usavam uma abordagem de esquema declarativa em vez do script de atualização da instalação. Esta é uma nova abordagem recomendada no Magento 2.3 e superior. O Magento 2.3.x ainda está trabalhando com InstallSchema, InstallData, etc. etc.