You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prestashop提示Field 'quantity' is deprecated报错解决

报错原因

PrestaShop 1.7及以上版本对库存逻辑做了重构:

  • 旧版本的产品库存直接存储在ps_product表的quantity字段,和产品主数据强绑定
  • 新版本库存统一迁移到ps_stock_available表管理,原生支持多店铺、多商品属性组合(SKU)的独立库存计算,原product表的quantity字段不再做实时同步,直接读取会拿到过期的错误数值,因此框架将返回数组中的quantity字段标记为废弃,读取时就会触发提示。
修复方案

推荐使用核心提供的库存类批量读取库存,比循环实例化Product对象性能高很多,适配列表页大批量拉取产品的场景:

  1. 先通过Product::getProducts()拿到产品基础信息,提取所有产品ID
  2. 调用StockAvailable类的静态方法批量拉取对应产品的实际可用库存
  3. 遍历时从库存映射结果中取数即可
    另外原代码里id_category_default的节点名首尾多打了空格,会导致输出的节点格式异常,一并做了修正。

修正后的完整代码如下:

$id_lang = (int)Context::getContext()->language->id;
$start = 0;
$limit = 100;
$order_by = 'id_product';
$order_way = 'DESC';
$all_products = Product::getProducts($id_lang, $start, $limit, $order_by, $order_way);

// 提取所有产品ID,批量查询库存
$product_ids = array_column($all_products, 'id_product');
$stock_list = StockAvailable::getQuantityAvailableByProducts($product_ids, $id_lang);

foreach ($all_products as $product) {
    // 取对应产品的实际库存
    $product_quantity = isset($stock_list[$product['id_product']]) ? (int)$stock_list[$product['id_product']] : 0;
    
    $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('product', 'product');
    $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('id', 'id');
    $this->output .= $product['id_product'];
    $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('id', '/id');
    $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('id_category_default', 'id_category_default');
    $this->output .= $product['id_category_default'];
    $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('id_category_default', '/id_category_default');
    $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('name', 'name');
    $this->output .= $product['name'];
    $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('name', '/name');
    $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('price', 'price');
    $this->output .= $product['price'];
    $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('price', '/price');
    $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('description', 'description');
    $this->output .= $product['description'];
    $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('description', '/description');
    $this->output .= $this->objOutput->getObjectRender()->renderNodeHeader('quantity', 'quantity');
    $this->output .= $product_quantity;
    $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('quantity', '/quantity');
    $this->output .= $this->objOutput->getObjectRender()->renderNodeFooter('product', '/product');
}

如果需要读取指定属性组合(比如不同尺码、颜色的SKU)的库存,给StockAvailable::getQuantityAvailableByProducts()传入第三个参数指定对应属性ID即可;如果需要区分店铺库存,传入对应店铺ID就能拿到指定店铺的实际库存数值。


内容的提问来源于stack exchange,提问作者Baptiste L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 14:01:27