Scripts d'installation
Le declarative schema
Nouveauté de Magento 2.3, le declarative schema est une nouvelle façon de créer des tables dans la base de données.
Le fichier est dans le dossier etc et s'appelle db_schema.xml. La syntaxe est la suivante :
<?xml version="1.0" ?>
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
<table comment="Adexos quote request Table" engine="innodb" name="adexos_formation_request" resource="default">
<column comment="Entity Id" identity="true" name="request_id" nullable="false" padding="6" unsigned="true" xsi:type="smallint"/>
<constraint referenceId="PRIMARY" xsi:type="primary">
<column name="request_id"/>
</constraint>
<column name="customer_name" nullable="false" xsi:type="text"/>
<column name="customer_email" nullable="false" xsi:type="text"/>
<column name="message" nullable="false" xsi:type="text"/>
</table>
</schema>
Il est possible de créer une clé étrangère de la façon suivante :
<constraint xsi:type="foreign" referenceId="<NOM DE LA CLE>" table="<table enfant>"
column="<colonne enfant>" referenceTable="<table parent>" referenceColumn="<colonne parent>" onDelete="CASCADE"/>
Et un index :
<index referenceId="<nom de l'index>" indexType="btree">
<column name="<colonne indexée>"/>
</index>
La table sera créée lors de la commande setup:upgrade.
Une fois cette table créée, ajouter la colonne telephone : il suffit de modifier le fichier db_schema.xml et de relancer la commande setup:upgrade.
La whitelist du declarative schema
Nous devrions générer une "whitelist" du schéma, c'est-à-dire une sauvegarde à un instant T du schéma dès lors qu'il est modifié. Cela permet à Magento de faire la différence entre la sauvegarde et le db_schema.xml.
C'est la seule façon de supprimer une colonne par exemple.
Le fichier peut être créé via la commande
php bin/magento setup:db-declaration:generate-whitelist --module-name=Adexos_Formation
Les patchs
Autre nouveauté de Magento 2.3, les setups ne sont plus réalisés via des InstallData ou UpgradeData, mais via des patchs.
La documentation officielle indique les différentes étapes à suivre pour créer un patch.
Il n'y a rien de compliqué, Magento va appliquer les patchs qu'il trouve qui ne sont pas listés dans la table patch_list.