使用add()方法添加对象后如何检索插入的ID?

5

我正在尝试创建一个自动导入XML文件的脚本,目前已经实现了这个功能。但是由于某个原因,我需要获取我添加的类别的ID,而这个类别ID是自动增量的,因此无法从现有数据中获取。

我的代码如下:

        $category = new Category;
        $category->active = 1;
        $category->id_parent = 3;
        $category->name[1] = $product->category_name;;
        $category->link_rewrite[1] = Tools::link_rewrite($product_xml->category_name);
        echo "<br />name of new category = $product->category_name <br /> <br />";
        $category->add();
        $category->id = Db::getInstance()->Insert_ID();

我在stackoverflow上读到,$category->id = Db::getInstance()->Insert_ID();应该可以解决问题。不幸的是,这总是返回零。有人能看出我做错了什么吗?
编辑: 我在使用prestashop版本1.6
编辑: 答案: 你不需要在 $object->add()之后使用 "Db::getInstance()->Insert_ID();",因为已经生成了一个ID,你只需要这样做: echo $object->id;就可以看到你的ID。
最好的问候,
Evert Arends

你使用的是哪个Prestashop版本? - Florian Lemaitre
我正在使用1.6版本。 - Evert Arends
2个回答

8

Prestashop已经在classes/ObjectModel.phpadd()方法中执行了此命令。

// Get object id in database
$this->id = Db::getInstance()->Insert_ID();

当您在对象上使用add()时,该对象会自动从数据库获取其新ID。因此,$category->id应已包含其新ID。
$category = new Category;
$category->active = 1;
$category->id_parent = 3;
$category->name[1] = $product->category_name;;
$category->link_rewrite[1] = Tools::link_rewrite($product_xml->category_name);
echo "<br />name of new category = $product->category_name <br /> <br />";
$category->add(); // Add will add the category to database and update category with its new id automatically
echo "category id = ".$category->id; // will show the category id.

但是为什么它会返回0呢?如果我理解你的答案有误,很抱歉,我不是母语人士。 - Evert Arends
因为 Prestashop 已经通过 Insert_ID 检索到了最后一个 ID。该方法每次添加只能使用一次。 - Florian Lemaitre
1
现在我明白了,谢谢你的帮助,我会编辑我的问题并添加这些信息。谢谢! - Evert Arends

-1
Last Inserted Id:

      echo $category->id;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接