我正忙着使用Opencart 2.0.3.1建立一个在线商店。我每天都会收到一个新的更新产品文件,并使用导入/导出扩展名上传它。每个产品都是根据自动增量product_id
加载的,每次加载新产品时,product_id
产品都不会保持唯一。
例如如果我加载文件产品P200可以链接到product_id
1240.如果明天再次加载相同的产品可以链接到product_id
1211.现在如果客户在product_id
1240上撰写评论,则会在下次更新时丢失,因为product_id
1240现在会链接到其他产品。
Opencart不会针对SKU记录审核,而是记录product_id
。如果有人可以帮助我,我将非常感激。
答案 0 :(得分:0)
我已经通过强制将产品恢复到excel工作簿中的原始product_id来解决此问题。然后使用新的product_id将任何新产品添加到列表中。在我上传之前,所有product_id都将被删除并从导入中重新加载。现在这是一个额外的步骤,但至少它正在完成这项工作。
答案 1 :(得分:0)
您可以通过将当前ID与标识符列存储在新表中并创建触发器来在插入时使用现有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安装的默认前缀,但您可能会有不同的。