Php 如何测试类别是否已经存在?普雷斯塔什酒店

Php 如何测试类别是否已经存在?普雷斯塔什酒店,php,xml,web-services,prestashop,Php,Xml,Web Services,Prestashop,我从其他数据库web服务获取类别,当我刷新文件以添加类别时,我将它们放在PrestaShop上。我想确定类别id是否存在,如果存在,我想更新类别 $XMLRQString = '<?xml version="1.0" encoding="utf-8"?>'. '<x:Winmax4GetFamiliesRQ xmlns:x="urn:Winmax4GetFamiliesRQ">'. '</x:Winmax4GetFamiliesRQ >';

我从其他数据库web服务获取类别,当我刷新文件以添加类别时,我将它们放在PrestaShop上。我想确定类别id是否存在,如果存在,我想更新类别

$XMLRQString = '<?xml version="1.0" encoding="utf-8"?>'.
    '<x:Winmax4GetFamiliesRQ xmlns:x="urn:Winmax4GetFamiliesRQ">'.
    '</x:Winmax4GetFamiliesRQ >';

$return = $client->GetFamilies($Params);
$XMLRSString = new SimpleXMLElement($return->GetFamiliesResult);
if ($XMLRSString->Code > 0)
    echo '</br>Error: '.$XMLRSString->Code." ".$XMLRSString->Message;
else{

        foreach ($XMLRSString->Families->Family as $family)
        {   

            $category = new Category();

            $category->id = $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');

            $category->add();

        }
    }
$XMLRQString=''。
''.
'';
$return=$client->GetFamilies($Params);
$XMLRSString=新的SimpleXMLElement($return->GetFamiliesResult);
如果($XMLRSString->Code>0)
回显“
错误:”.$XMLRSString->Code.“$XMLRSString->Message; 否则{ foreach($XMLRSString->Families->Family as$Family) { $category=新类别(); $category->id=$family->Code; $category->force_id=true; $category->is\u root\u category=false; $category->name=array((int)配置::get('PS\u LANG\u DEFAULT')=>$family->Designation); $category->link\u rewrite=array((int)配置::get('PS\u LANG\u DEFAULT')=>$family->Code); $category->id\u parent=Configuration::get('PS\u HOME\u category'); $category->add(); } }
一般来说,如果您有大数据(以及安全数据),最好直接将数据插入数据库。使用Db类而不是类别类


否则,您必须使用save()方法而不是add()方法。通常,如果您有大数据(以及安全数据),最好直接将数据插入数据库。使用Db类而不是类别类


否则,您必须使用save()方法而不是add()方法。这将起作用:

$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
$home = (int)Configuration::get('PS_HOME_CATEGORY');
$category = new Category((int)$family->Code);
$category->is_root_category = false;
$category->name = array($default_lang => $family->Designation);
$category->link_rewrite = array($default_lang => $family->Code);
$category->id_parent = $home;
$category->save();

此外,您可以始终使用
Validate::isLoadedObject()
静态方法检查对象是否有效。

这将起作用:

$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
$home = (int)Configuration::get('PS_HOME_CATEGORY');
$category = new Category((int)$family->Code);
$category->is_root_category = false;
$category->name = array($default_lang => $family->Designation);
$category->link_rewrite = array($default_lang => $family->Code);
$category->id_parent = $home;
$category->save();

另外,您可以始终使用
Validate::isLoadedObject()
静态方法检查对象是否有效。

这是一个选项,但对于我的目标,它不起作用。无论如何,谢谢你,这是一个选择,但对于我的目标来说,它不起作用。无论如何谢谢,谢谢,但它不起作用,因为如果我删除了Prestashop上的类别,在我执行文件创建类别时,它不会添加。如果类别不存在,
save()
方法将创建类别,如果存在,则更新类别。下面是它的功能
return(int)$this->id>0$此->更新($null\u值):$this->add($auto\u date,$null\u值)。我希望这会有帮助。它现在可以工作,但没有添加到ps_类别上,因此没有显示在PrestaShop shop上,而是添加到其他表上。谢谢,但它不起作用,因为如果我删除PrestaShop上的类别,它在我执行文件创建类别时不会添加。
save()
方法将创建类别(如果不存在),或者更新类别(如果存在)。下面是它的功能
return(int)$this->id>0$此->更新($null\u值):$this->add($auto\u date,$null\u值)。我希望这会有帮助。它现在可以工作了,但是没有添加到ps_类别,所以没有显示在PrestaShop商店中,而是添加到其他表中