Più righe nel database per la stessa entità

Questo articolo fornisce una soluzione al problema relativo alla presenza di più righe per lo stesso ID entità nel database.

Prodotti e versioni interessati:

  • Adobe Commerce (tutte le versioni)

Problema

Nel database sono presenti più righe per lo stesso ID entità.

Ad esempio, dopo aver ricevuto un elenco di record con ID entità duplicati quando esegui questa query:

SELECT * FROM $entityTable WHERE $column = <$entityID> ORDER BY created_in;

Dove $entityID = ID di categoria/prodotto/regola prezzo carrello/regola prezzo catalogo/pagina CMS.

Entità
$entityTable
$column
Categoria/Prodotto
catalog_category_entity/catalog_product_entity
entity_id
Regola prezzo carrello/Regola prezzo catalogo
salesrule/catalogrule
rule_id
Pagina CMS
cms_page
page_id

Causa

Questo è il comportamento previsto. Le più righe vengono create dalla funzionalità di gestione temporanea del contenuto:

  • Se specifichi una data di inizio senza una data di fine, ci saranno almeno due righe con lo stesso ID entità/regola/pagina. Una riga indica lo stato originale dell'entità (la riga in cui created_in=1) e una riga indica la fine dell'aggiornamento pianificato.

  • Se specifichi una data di inizio con una data di fine, ci saranno almeno tre righe con lo stesso ID entità/regola/pagina. Una riga indica lo stato originale dell'entità (la riga in cui created_in=1), una riga indica l'Inizio dell'aggiornamento pianificato e una riga indica la Fine dell'aggiornamento pianificato.

Ad esempio, in questa query:

SELECT row_id, entity_id, created_in, updated_in FROM catalog_product_entity WHERE entity_id = 483 ORDER BY created_in;

righe_multiple_in_database.png

  • I valori created_in e updated_in devono seguire questo schema: il valore created_in della riga corrente è uguale al valore updated_in della riga precedente. Inoltre, la prima riga deve contenere created_in = 1 e l'ultima riga updated_in = 2147483647. Se è presente una sola riga, è necessario visualizzare created_in=1 e updated_in=2147483647.

Perché la seconda voce del database (e tutte quelle successive) viene visualizzata nel database per la stessa entità?

  • Il secondo record del database (ed eventualmente i successivi) per l'entità interessata indica che sono stati pianificati aggiornamenti di gestione temporanea del contenuto tramite il modulo Magento_Staging, che crea un record aggiuntivo per un'entità nelle rispettive tabelle.

Un problema si verifica solo se i record hanno gli stessi valori per le colonne created_in o updated_in.

Soluzione

Questo è il comportamento previsto e darà luogo a problemi solo in presenza di discrepanze tra le righe.

Lettura correlata

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a