Opencart product_id 变化

Opencart product_id changes

我正忙于使用 Opencart 2.0.3.1 建立在线商店。每天我都会收到一个新的更新产品文件,并使用 Import/Export 扩展名上传它。每个产品都根据自动增量 product_id 加载,并且每次我加载新产品时,产品的 product_id 都不会保持唯一。

例如 如果我加载文件产品 P200 可以 link 编辑到 product_id 1240。如果明天再次加载相同的产品可以linked 到 product_id 1211。现在,如果客户在 product_id 1240 上写了评论,它将在下次更新时丢失,因为 product_id 1240 现在 link 到另一个产品。

Opencart 不记录针对 SKU 的评论,而是针对 product_id。如果有人能在这里提供帮助,我将不胜感激。

我已通过在 excel 工作簿中将产品强制恢复为原始 product_id 来解决此问题。然后将任何新产品及其新 product_id 添加到列表中。在我上传之前,所有 product_id 都被删除并从导入中重新加载。现在这是一个额外的步骤,但至少它正在完成工作。

您可以通过将当前 ID 与标识符列存储在新的 table 中并创建触发器以在插入时使用现有 ID 更新 product_id 来保持唯一 ID。

我将展示一个仅使用产品型号作为唯一字段来匹配现有产品的简单示例。

Create Table map_products(id Int, model Varchar(64));

Insert Into map_products 
Select product_id, model From oc_product;

Delimiter $$
Create Trigger oc_product_insert Before Insert On oc_product
For Each Row
Begin
  Declare original_id Int;
  Select id Into original_id From map_products Where model = New.model;
  If (original_id IS NOT NULL) Then
    Set New.product_id = Select id From map_products Where model = New.model;
  Else
    // You either wouldn't have to do anything here or reseed your identity
    // column for new products depending on if the Import/Export extension
    // resets your identity seed. 

    // Also, you need to create new records in your map_products table too.
    Insert Into map_products Values (last_insert_id(), New.model);
  End If;
End$$
Delimiter ;

抱歉,我没有测试此代码,因为我没有 opencart 的测试环境,但它应该让您清楚地了解您可以做什么。如果我没记错的话,您需要 mysql 中的超级用户权限才能创建触发器。另请注意,我使用 'oc_' 因为它是 opencart 安装的默认前缀,但您可能有不同的前缀。