所以我已经处理了这个问题很长一段时间了,并且无法找到明确的解决方案。所以基本上我是使用产品对象直接将新产品添加到数据库中。目前它进展顺利,但我无法将新产品与一个类别联系起来。
$cat_ids = [];
foreach ($value['kat_naziv'] as $cat_val) {
$cat_ids[] = (int)$luceed->selectCategoryIds($cat_val)[$cat_val]['id_category'];
}
$product->id_category = 3;
$product->id_category_default = 3;
$product->save();
$product->addToCategories($cat_ids);
所以基本上$ cat_ids是我从db获取的整数数组,其中name是作为参数传递给selectCategoryIds的东西;
这里有什么问题,为什么它不会将新创建的产品与我给它的类别联系起来
答案 0 :(得分:1)
创建新产品后(即$ product = new Product())。您可以使用分配产品类别。
$product->updateCategories($category_array);
其中
$category_array = array("0" => "2", "1" => "3", "4" => "6"...... );
答案 1 :(得分:0)
@FMEModule这正是我在那里所做的,但我已经用数据库中的类别ID填充了数组
无论如何,我最终编写了自己的查询,用于将类别与产品相关联
答案 2 :(得分:0)
版本(1.6)
我在Product.php
的{{1}}中发现以下错误,搜索addToCategories
(第964行),
注意if (!in_array($new_id_categ, $current_categories))
缺少if
- 添加它们,问题就解决了:
{}
Prestashop开发人员喜欢在 foreach ($categories as $new_id_categ) {
if (!in_array($new_id_categ, $current_categories)) {
if ($position == null) {
$position = (int)$new_categ_pos[$new_id_categ];
}
$product_cats[] = array(
'id_category' => (int)$new_id_categ,
'id_product' => (int)$this->id,
'position' => $position,
);
}
}
和{}
之后省略if
- 这是晚餐烦人且容易出错。
此问题已在回购中修复: https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Product.php
注意:此解决方案解决了以下情况中的错误 - foreach
虽然我不确定这是否是问题中的情景。