Meerdere rijen in de database voor dezelfde entiteit
- Onderwerpen:
- Catalogusbeheer
- Categorieën
Gemaakt voor:
- Ontwikkelaar
Dit artikel biedt een oplossing voor het probleem waarbij er meerdere rijen voor dezelfde entiteitsidentiteitskaart in de database zijn.
Betrokken producten en versies:
- Adobe Commerce (alle versies)
Probleem
De database bevat meerdere rijen voor dezelfde entiteit-id.
Bijvoorbeeld, na het ontvangen van een lijst van verslagen met dubbele entiteit IDs wanneer u deze vraag in werking stelt:
SELECT * FROM $entityTable WHERE $column = <$entityID> ORDER BY created_in;
Waarbij $entityID = ID
van de pagina Categorie/product/winkelprijsegel/catalogusprijsregel/CMS.
Entiteit | $entityTable | $column |
---|---|---|
Categorie/Product | catalog_category_entiteit/catalog_product_entiteit | entity_id |
Prijsregel winkelwagentje/regel catalogusprijs | winkelregel/catalogusregel | rule_id |
CMS-pagina | cms_page | page_id |
Oorzaak
Dit is het verwachte gedrag. De meerdere rijen worden gemaakt door de functie voor het opslaan van inhoud:
-
Als u een begindatum zonder een einddatum opgeeft, zijn er minstens twee rijen met dezelfde entiteit-/regel-/pagina-id. Één rij zal op de originele staat van de entiteit (de rij wijzen waarin
created_in=1
), en één rij zal op het Eind van de Geplande Update wijzen. -
Als u een begindatum opgeeft met een einddatum, zijn er ten minste drie rijen met dezelfde entiteit-/regel-/pagina-id. Één rij zal op de originele staat van de entiteit (de rij waarin
created_in=1
) wijzen, zal één rij voor het Begin van de Geplande Update zijn, en één rij zal voor het Eind van de Geplande Update zijn.
In deze query ziet u bijvoorbeeld:
SELECT row_id, entity_id, created_in, updated_in FROM catalog_product_entity WHERE entity_id = 483 ORDER BY created_in;
- De waarden
created_in
enupdated_in
moeten dit patroon volgen: de waardecreated_in
van de huidige rij is gelijk aan de waardeupdated_in
in de vorige rij. Bovendien moet de eerste rijcreated_in = 1
bevatten en de laatste rijupdated_in = 2147483647
. (Als er slechts één rij is, moet ucreated_in=1
enupdated_in=2147483647
zien.)
Waarom wordt de tweede DB-vermelding (en alle volgende vermeldingen) in de DB voor dezelfde entiteit weergegeven?
- De tweede DB-record (en mogelijk de volgende record) voor de betrokken entiteit betekent dat er updates voor het opslaan van inhoud zijn gepland met de module
Magento_Staging
, die een extra record maakt voor een entiteit in de respectievelijke tabellen.
Er treedt alleen een probleem op als de records dezelfde waarden hebben voor de kolommen created_in
of updated_in
.
Oplossing
Dit is het verwachte gedrag en leidt alleen tot problemen als er verschillen tussen de rijen zijn.
Gerelateerde lezing
- de Veranderingen in categorieën worden niet bewaardin onze basis van de steunkennis
- Beste praktijken voor het wijzigen van gegevensbestandlijstenin het Playbook van de Implementatie van Commerce