同じエンティティのデータベース内の複数の行
この記事では、データベース内に同じエンティティ ID の行が複数ある場合の解決策を説明します。
説明 description
影響を受ける製品とバージョン
Adobe Commerce(すべてのバージョン)
問題
データベース内に同じエンティティ ID の行が複数あります。
例えば、エンティティ ID が重複するレコードのリストを受け取った後に、次のクエリを実行します。
SELECT * FROM $entityTable WHERE $column = <$entityID> ORDER BY created_in;
カテゴリ/商品/買い物かご価格ルール/カタログ価格ルール/CMSページの $entityID = 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;
created_in と updated_in の値は、次のパターンに従う必要があります。現在の行の created_in 値は、前の行の updated_in 値と等しくなります。 また、最初の行には created_in = 1 を、最後の行には updated_in = 2147483647 を含める必要があります。 (行が 1 つしかない場合は、created_in=1 と updated_in=2147483647 が表示されます)。
2 つ目の DB エントリ(および次のエントリすべて)が同じエンティティの DB に表示されるのはなぜですか?
影響を受けるエンティティの 2 つ目の DB レコード(場合によっては次のレコード)は、Magento_Staging モジュールを使用してスケジュールされたコンテンツステージング更新があったことを示しています。これにより、各テーブルのエンティティ用に追加のレコードが作成されます。
問題は、レコードの created_in 列または updated_in 列の値が同じ場合にのみ発生します。
解決策 resolution
これは想定されている動作で、行間に不一致がある場合にのみ問題が発生します。
関連資料
カテゴリに対する変更は保存されません アドビのサポートナレッジベースに保存されます
Commerce実装プレイブックの データベーステーブルを変更する際のベストプラクティス