同じエンティティのデータベース内の複数の行

この記事では、データベース内に同じエンティティ ID の行が複数ある場合の解決策を説明します。

説明 description

影響を受ける製品とバージョン

Adobe Commerce(すべてのバージョン)

問題

データベース内に同じエンティティ ID の行が複数あります。

例えば、エンティティ ID が重複するレコードのリストを受け取った後に、次のクエリを実行します。

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

カテゴリ/商品/買い物かご価格ルール/カタログ価格ルール/CMSページの $entityID = ID

エンティティ
$entityTable
列($C)
カテゴリ/製品
catalog_category_entity / catalog_product_entity
entity_id
買い物かご価格ルール/カタログ価格ルール
salesrule/catalogrule
rule_id
CMSページ
cms_page
page_id

原因

これは想定されている動作です。 コンテンツのステージング機能で複数の行が作成されます。

終了日を指定せずに開始日を指定した場合、同じエンティティ/ルール/ページ ID を持つ行が少なくとも 2 つ存在します。 1 つの行はエンティティの元の状態(created_in=1 の行)を示し、1 つの行はスケジュールされた更新の*終了*を示します。

開始日と終了日を指定した場合、同じエンティティ/ルール/ページ ID を持つ行が少なくとも 3 つ存在することになります。 1 つの行はエンティティの元の状態(created_in=1 が含まれる行)を示し、1 つの行はスケジュールされた更新の「*開始」、1 つの行はスケジュールされた更新の「*終了」(*終了)を示します。

例えば、次のクエリの場合:

SELECT row_id, entity_id, created_in, updated_in FROM catalog_product_entity WHERE entity_id = 483 ORDER BY created_in;
row_id
entity_id
created_in
updated_in
2049
483
1
1540837826
483
483
1540837826
1540837842
2052
483
1540837826
2147483647
2051
483
1540837842
2147483647

created_inupdated_in の値は、次のパターンに従う必要があります。現在の行の created_in 値は、前の行の updated_in 値と等しくなります。 また、最初の行には created_in = 1 を、最後の行には updated_in = 2147483647 を含める必要があります。 (行が 1 つしかない場合は、created_in=1updated_in=2147483647 が表示されます)。

2 つ目の DB エントリ(および次のエントリすべて)が同じエンティティの DB に表示されるのはなぜですか?

影響を受けるエンティティの 2 つ目の DB レコード(場合によっては次のレコード)は、Magento_Staging モジュールを使用してスケジュールされたコンテンツステージング更新があったことを示しています。これにより、各テーブルのエンティティ用に追加のレコードが作成されます。

問題は、レコードの created_in 列または updated_in 列の値が同じ場合にのみ発生します。

解決策 resolution

これは想定されている動作で、行間に不一致がある場合にのみ問題が発生します。

関連資料

​ カテゴリに対する変更は保存されません ​ アドビのサポートナレッジベースに保存されます

Commerce実装プレイブックの ​ データベーステーブルを変更する際のベストプラクティス ​

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f