J'installe le magento 2.3 et je crée un module personnalisé.
Mais, je ne sais pas comment créer une table de base de données personnalisée dans la version magento 2.3.
J'installe le magento 2.3 et je crée un module personnalisé.
Mais, je ne sais pas comment créer une table de base de données personnalisée dans la version magento 2.3.
Réponses:
Tout d'abord, créez un db_schema.xml
fichier à l'intérieur /RH/Helloworld/etc
et écrivez le code suivant:
<?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>
= "Utiliser pour créer et définir le nom de la table"<column> .. </column>
= "Utiliser pour créer et définir une colonne de la table"<constraint> .. </constraint>
= "Utiliser pour définir la contrainte comme la clé primaire, la clé étrangère, la clé unique, etc."Avant d'exécuter la commande de mise à niveau, vous devez ajouter votre schéma au db_whitelist_schema.json
fichier en exécutant la commande suivante:
php bin/magento setup:db-declaration:generate-whitelist --module-name=RH_Helloworld
Maintenant, un db_whitelist_schema.json
fichier sera créé dans le /RH/Helloworld/etc
dossier.
Maintenant, lancez php bin/magento s:up
La table sera créée dans la base de données.
=> Si vous souhaitez renommer une colonne, vous devez définir la ligne ci-dessous dans votre db_schema.xml
colonne appropriée:
<column xsi:type="varchar" name="customer_email" onCreate="migrateDataFrom(email)" on_update="false" nullable="false" default="" comment="Customer Email"/>
ici, name = "nouveau nom de colonne" et onCreate = "migrateDataFrom ()" = "ancien nom de colonne"
=> Si vous souhaitez supprimer la table, vous pouvez soit supprimer le nœud de table entier du fichier xml, soit définir l'attribut désactivé sur true comme la ligne ci-dessous dans votre db_schema.xml
:
<table name="rh_helloworld" resource="default" engine="innodb" comment="RH Helloworld" disabled="true">
..
</table>
Pour plus de détails, vous pouvez vérifier ici .
J'espère que cela vous sera utile.
Créez un fichier nommé db_schema.xml sous le dossier etc dans votre module personnalisé.
<?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>
Créez maintenant db_whitelist_schema.json sur le même chemin
php bin/magento setup:db-declaration:generate-whitelist --module-name=Vendor_Module
Après cela, lancez simplement la configuration de php bin / magento: mise à niveau . Pour plus d'informations, vous pouvez consulter ici . Faites-moi savoir au cas où vous auriez besoin de plus d'explications à ce sujet.
Les modules principaux de Magento 2.3 ont utilisé une approche de schéma déclaratif au lieu du script de mise à niveau de l'installation. Il s'agit d'une nouvelle approche recommandée dans Magento 2.3 et supérieur. Magento 2.3.x fonctionne toujours avec InstallSchema, InstallData, .. etc.