類別變更未儲存

本文修正透過「Commerce管理員」更新產品類別時,管理員和店面不會顯示變更的問題。 問題是由於catalog_category_entity資料表中的資料損毀所造成。 若要解決此問題,請修正或移除表格中有問題的類別更新記錄。 之後,您應該能夠使用管理員更新產品類別。

問題

在管理員中變更產品類別並儲存後,新的更新既不會儲存也不會顯示在管理員和店面中。

要再現的步驟

  1. 移至​ 目錄 > 類別
  2. 選取類別。
  3. 進行變更,然後按一下[儲存]。
  4. 顯示訊息: 您已儲存類別
  5. 請注意,您所做的變更尚未儲存。

可能的原因: catalog_category_entity資料表中的資料損毀

此問題是由資料庫(DB)中受影響類別記錄的created_in欄中的相同值所造成。

catalog_category_entity資料表中的資料已損毀

詳細資料:

  • catalog_category_entity資料庫資料表有兩個或多個受影響類別的記錄(這些記錄具有相同的entity_id值)。
  • 這些類別記錄在created_in欄​ 中有 ​個相同的值。

第二個資料庫專案(以及所有後續專案)如何出現在相同類別的DB中?

受影響類別的第二個DB記錄(可能還有下一個記錄)表示已使用Magento_Staging模組排程類別更新。 模組會為catalog_category_entity中的類別建立額外記錄,這是預期的應用程式行為;問題是這些記錄的created_in欄具有相同的值。

相同的值如何顯示?

我們無法確切說明資料損毀的原因。 可能的原因包括:

  • 自訂(程式碼、主題等)
  • 不正確的資料移轉
  • 從備份還原的資料不正確

就我們所知,這類資料損毀不適用於「乾淨」(現成)Adobe Commerce執行個體,而且無法在沒有自訂功能的Adobe Commerce安裝上重現。

如何確認這是您的問題

catalog_category_entity資料表應包含受影響類別的多筆記錄(記錄應具有相同的entity_id值),而且這些記錄中至少有兩筆應具有相同的created_in值。 如此一來,Commerce管理員中就不會顯示測試排程更新;您只會看到空白的「已排程變更」區塊。

驗證步驟

  1. 存取資料庫中的catalog_category_entity表格。
  2. 依entity_id篩選實體,使用entity_id識別受影響的類別。
  3. 如果created_in欄中的值對於具有相同entity_id的不同專案是相同的,即是這種情況。 通常每個記錄的created_in值都不同。

catalog_category_entity資料表中的資料已損毀

解決方案

您可以選擇下列其中一種解決方案:

  1. 刪除 ​有問題的類別更新記錄
  2. 修復 ​有問題的類別更新記錄

刪除有問題的類別更新記錄

在這個解決方案中,您需要為初始類別記錄設定正確的updated_in值,並刪除此類別的所有其他記錄。 這會移除所有已排程的類別更新。

請依照下列步驟執行:

  1. 尋找具有受影響類別之entity_id的DB記錄。
  2. 選取updated_in欄中整數最大的記錄。
  3. 從選取的記錄複製updated_in值。
  4. 選取具有row_id = entity_id (初始類別記錄)的記錄,並將複製的值貼到此記錄的updated_in欄。
  5. 刪除row_id不等於entity_id的列。

修復有問題的類別更新記錄

  1. 尋找具有相同entity_id和相同created_in值的類別記錄。
  2. 選取row_id = entity_id的記錄並複製updated_in值。
  3. 選取row_id不等於entity_id的記錄,並將複製的updated_in值貼上為created_in值。 請參閱下方的熒幕擷圖以作圖例。 正在複製created_in值.png
  4. 驗證staging_update表格中是否存在類別更新記錄(步驟3中已更新的created_in值)。 例如: ​如果複製的created_in值為1509281953,則staging_update資料表中必須存在具有row_id = 1509281953的實體。

相關閱讀

在Commerce實作行動手冊中修改資料庫表格的最佳實務

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