ACSD-60989 : la modification d’une colonne avec une clé étrangère par le biais d’un schéma déclaratif entraîne des erreurs sur les MariaDB

Le correctif ACSD-60989 corrige le problème où la modification d’une colonne avec une clé étrangère via un schéma déclaratif sur MariaDB provoque des erreurs de mise à niveau de la configuration en raison de contraintes de clé étrangère. Ce correctif est disponible lorsque la version 1.1.78 de Quality Patches Tool (QPT) est installée. L’ID du correctif est ACSD-60989. Ce problème a été résolu dans Adobe Commerce 2.4.8.

Produits et versions concernés

Le correctif est créé pour la version Adobe Commerce :

  • Adobe Commerce (toutes les méthodes de déploiement) 2.4.6-p6

Compatible avec les versions d’Adobe Commerce :

  • Adobe Commerce (toutes les méthodes de déploiement) >=2.4.4 <2.4.8
NOTE
Le correctif peut s’appliquer à d’autres versions avec de nouvelles versions de Quality Patches Tool. Pour vérifier si le correctif est compatible avec votre version d’Adobe Commerce, mettez à jour le package magento/quality-patches vers la dernière version et vérifiez la compatibilité sur la page Quality Patches Tool : Rechercher des correctifs. Utilisez l’ID du correctif comme mot-clé de recherche pour localiser le correctif.

Problème

La modification d’une colonne avec une clé étrangère via le schéma déclaratif sur MariaDB échoue en raison d’erreurs de contrainte de clé étrangère lors de la mise à niveau de la configuration.

Procédure à suivre :

  1. Accédez à Admin > Stores > Settings > Order Status.

  2. Cliquez sur Create New Status, saisissez test dans tous les champs, puis enregistrez.

  3. Cliquez sur Assign Status to State.

    1. Définissez Order Status sur test.
    2. Définissez Order State sur Reçu.
    3. Enregistrez l’affectation.
  4. Créez, enregistrez et activez un module personnalisé, puis ajoutez les éléments suivants à db_schema.xml :

    code language-none
    <?xml version="1.0"?>
    <schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/etc/db_schema.xsd">
        <table name="sales_order_status">
            <column xsi:type="varchar" name="status" nullable="false" length="64" comment="Order Status"/>
        </table>
        <table name="sales_order_status_state">
            <column xsi:type="varchar" name="status" nullable="false" length="64" comment="Order Status"/>
        </table>
        <table name="sales_order_status_label">
            <column xsi:type="varchar" name="status" nullable="false" length="64" comment="Order Status"/>
        </table>
    </schema>
    
  5. Exécutez la commande suivante :

    code language-none
    bin/magento setup:upgrade
    

Résultats attendus :

La mise à niveau de la configuration s’est terminée sans erreur de contrainte de clé étrangère.

Résultats réels :

Une erreur se produit lors de la mise à niveau de la configuration :

Unable to apply patch Vendor\Sales\Setup\Patch\Schema\DataPatch for module Vendor_Sales.
Original exception message:
SQLSTATE[HY000]: General error: 1833 Cannot change column 'status': used in a foreign key constraint
'SALES_ORDER_STATUS_LABEL_STATUS_SALES_ORDER_STATUS_STATUS'
of table 'sales_order_status_label'

Application du correctif

Pour appliquer des correctifs individuels, utilisez les liens suivants en fonction de votre méthode de déploiement :

Lecture connexe

Pour en savoir plus sur Quality Patches Tool, consultez :

recommendation-more-help
commerce-operations-help-tools