ACSD-60989: la modifica di una colonna con una chiave esterna tramite uno schema dichiarativo causa errori in MariaDB

La patch ACSD-60989 risolve il problema se la modifica di una colonna con una chiave esterna tramite uno schema dichiarativo in MariaDB causa errori di aggiornamento dell’installazione a causa di vincoli di chiave esterna. Questa patch è disponibile quando è installato Quality Patches Tool (QPT) 1.1.78. L’ID della patch è ACSD-60989. Questo problema è stato risolto in Adobe Commerce 2.4.8.

Prodotti e versioni interessati

La patch è stata creata per la versione di Adobe Commerce:

  • Adobe Commerce (tutti i metodi di implementazione) 2.4.6-p6

Compatibile con le versioni di Adobe Commerce:

  • Adobe Commerce (tutti i metodi di implementazione) >=2.4.4 <2.4.8
NOTE
La patch potrebbe diventare applicabile ad altre versioni con le nuove versioni di Quality Patches Tool. Per verificare se la patch è compatibile con la versione di Adobe Commerce in uso, aggiornare il pacchetto magento/quality-patches alla versione più recente e verificare la compatibilità nella pagina Quality Patches Tool: Cerca patch. Utilizza l’ID patch come parola chiave di ricerca per individuare la patch.

Problema

La modifica di una colonna con una chiave esterna tramite schema dichiarativo in MariaDB non riesce a causa di errori di vincolo della chiave esterna durante l’aggiornamento dell’installazione.

Passaggi da riprodurre:

  1. Vai a Admin > Stores > Settings > Order Status.

  2. Fai clic su Create New Status, immetti test in tutti i campi e salva.

  3. Fare clic su Assign Status to State.

    1. Imposta Order Status su test.
    2. Imposta Order State su Ricevuto.
    3. Salvare l’assegnazione.
  4. Creare, registrare e abilitare un modulo personalizzato e aggiungere quanto segue a 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. Esegui il comando seguente:

    code language-none
    bin/magento setup:upgrade
    

Risultati previsti:

L’aggiornamento dell’installazione viene completato senza errori di vincolo della chiave esterna.

Risultati effettivi:

Errore durante l’aggiornamento dell’installazione:

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'

Applicare la patch

Per applicare singole patch, utilizzare i collegamenti seguenti, a seconda del metodo di distribuzione utilizzato:

Lettura correlata

Per ulteriori informazioni su Quality Patches Tool, vedere:

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