在 php 中更新数量但在 Magento 中未更新?
Update qty in php but not updated in Magento?
我在下面获得了这段代码,用于检索和更新我的 Magento 产品的 1 个 SKU。
它已更新,当我查看代码 $product->getQty();
时看起来不错
但是当我查看 Magento 时,数量没有更新....
你能告诉我我哪里做错了吗?
<?php
define('MAGENTO_ROOT', dirname(__FILE__));
$mageFilename = MAGENTO_ROOT . '/app/Mage.php';
require_once $mageFilename;
Varien_Profiler::enable();
ini_set('display_errors', 1);
umask(0);
Mage::app();
//get the collection filter the simple products & join the cataloginventory/stock_item table
$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('sku')->addAttributeToFilter('type_id', 'simple')->joinField(
'qty',
'cataloginventory/stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
) ;
?>
<html>
<head></head>
<body>
<table>
<?php
foreach ($collection as $product) {
if ($product->getSku() == "test123") {
try
{
$product->setData('qty', 99);
$product->save();
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
echo "<tr><td>".$product->getSku()."</td><td> ".(int)$product->getQty()."</td></tr>";
};
?>
数量字段不是产品模型的属性,它存在的唯一原因是您将 stock_item table 左连接到它上面。要更新数量,您需要更新 stock_item 模型的实例并保存它。有一个方便的辅助函数,可让您通过产品 ID 加载 stock_item。
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($myProductId);
if ($stockItem->getId()) {
$stockItem->setQty($qty);
$stockItem->save();
}
你的 getQty 输出之后正确工作的原因是因为模型是一个 Varien_Object 并且因此具有神奇的 getter/setters 可以让你在模型上保存一个名为 "Qty" 的变量并且稍后再取回。但是,在模型上有一个变量并不意味着它会附加到该数据库条目,当您调用 save() 时,只会保存连接到产品实体的属性。
我在下面获得了这段代码,用于检索和更新我的 Magento 产品的 1 个 SKU。
它已更新,当我查看代码 $product->getQty();
时看起来不错但是当我查看 Magento 时,数量没有更新....
你能告诉我我哪里做错了吗?
<?php
define('MAGENTO_ROOT', dirname(__FILE__));
$mageFilename = MAGENTO_ROOT . '/app/Mage.php';
require_once $mageFilename;
Varien_Profiler::enable();
ini_set('display_errors', 1);
umask(0);
Mage::app();
//get the collection filter the simple products & join the cataloginventory/stock_item table
$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('sku')->addAttributeToFilter('type_id', 'simple')->joinField(
'qty',
'cataloginventory/stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
) ;
?>
<html>
<head></head>
<body>
<table>
<?php
foreach ($collection as $product) {
if ($product->getSku() == "test123") {
try
{
$product->setData('qty', 99);
$product->save();
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
echo "<tr><td>".$product->getSku()."</td><td> ".(int)$product->getQty()."</td></tr>";
};
?>
数量字段不是产品模型的属性,它存在的唯一原因是您将 stock_item table 左连接到它上面。要更新数量,您需要更新 stock_item 模型的实例并保存它。有一个方便的辅助函数,可让您通过产品 ID 加载 stock_item。
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($myProductId);
if ($stockItem->getId()) {
$stockItem->setQty($qty);
$stockItem->save();
}
你的 getQty 输出之后正确工作的原因是因为模型是一个 Varien_Object 并且因此具有神奇的 getter/setters 可以让你在模型上保存一个名为 "Qty" 的变量并且稍后再取回。但是,在模型上有一个变量并不意味着它会附加到该数据库条目,当您调用 save() 时,只会保存连接到产品实体的属性。