首页 > 解决方案 > 验证一个类别是否已经存在,如果存在 save() 如果不存在 add() PrestaShop

问题描述

我的项目是使用 Web 服务添加类别,当我刷新类别文件时,它会创建与以前相同的类别。

  foreach ($XMLRSString->Families->Family as $family)
        {   
            $categories = $family->Code;

            $exists = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('select id_category from ps_category where id_category = "'.$categories['id_category'].'"');

                $category = new Category((int)$categories);

                $category->id=  (int)$categories;

                $category->id_category_default=(int)$family->Code;

                $category->force_id = true;

                $category->is_root_category = false;

                $category->name = array((int)Configuration::get('PS_LANG_DEFAULT') => $family->Designation);

                $category->link_rewrite = array((int)Configuration::get('PS_LANG_DEFAULT') =>  $family->Code);

                $category->id_parent = Configuration::get('PS_HOME_CATEGORY');

                if($exists){
                    $category->add();
                    echo "created ".$family->Code."<br>";
                }
                else{
                    $category->save();
                    echo "already exists ".$family->Code."<br>";
                }
        }

它没有出现任何错误,但没有出现在 PrestaShop 类别中

标签: phpxmlprestashopcategories

解决方案


不需要使用if ($exists),因为$category->save();已经检查类别是否存在,如果存在则更新它,否则将创建它。

你可以参考你之前关于这个主题的问题: 如何测试一个类别是否已经存在?PrestaShop

我认为您的问题来自您忘记将类别设置为活动的事实:

$category->active = 1;

此外,您应该检查$category->save();.

我希望这有帮助!


推荐阅读