0

我有一个 Magento 的产品导入代码,它将库存(数量)分配给仓库位置(stock_id)。信息是在一个数组中传递的,但是我对数组的工作知识并不是那么快,所以我确定我没有正确地做到这一点。

导入目前是这样完成的,但我确信它不是最有效的,因为我保存了两次产品。

这会将 100 的数量分配给位置 1 (stock_id 1),保存产品,然后将 200 的数量分配给位置 2 (stock_id 2),然后再次保存产品。

 $stocksData = $product->getStocksData();
        if (!$stockData) {
            $stockData = array();
        }
        $stockData['stock_id'] = 1;
        $stockData['qty'] = 100; 
        $stocksData[$stockId] = $stockData;
        $product->setStocksData($stocksData);

        $product->setCreatedAt(strtotime('now'));
        try {
            $product->save();
            echo "Successful";
        }
        catch (Exception $ex) {
            echo 'There was an error :<br/>' .$ex;
        }

     $stocksData = $product->getStocksData();
            if (!$stockData) {
                $stockData = array();
            }
            $stockData['stock_id'] = 2;
            $stockData['qty'] = 200; 
            $stocksData[$stockId] = $stockData;
            $product->setStocksData($stocksData);


$product->setCreatedAt(strtotime('now'));
try {
    $product->save();
    echo "Successful";
}
catch (Exception $ex) {
    echo 'There was an error :<br/>' .$ex;
}

我想要实现的是设置数组中的所有值并保存一次,因为这会减轻脚本的负担。

我一直在玩这样的东西,但是没有得到任何地方,通常最终会出现错误:

     $stocksData = $product->getStocksData();
               if (!$stockData) {
                   $stockData = array();
               }
               $stockData = array(
[$stockData['stock_id'] = 1] => $stockData['qty'] = 100,
[$stockData['stock_id'] = 2] => $stockData['qty'] = 200
);
               $stocksData[$stockId] = $stockData;
               $product->setStocksData($stocksData);

我假设可以将所有这些信息放在一个数组中,但我不确定如何。

4

1 回答 1

1

在 php.ini 中有很多方法可以初始化数组。

$stocksData = array(
  'key' => 'value',
  'myarr' => array(
    'nested' => 'array',
    1,
  ),
  'id_copy' => $stocksData['id'],
  'qty' => $stocksData['stock_id'] == 1 ? 100 : 200,
);

有关数组语法的完整说明,请查看 php 的数组文档。还要注意我对三元运算符的使用。你可以通过这样说来绕过使用这种语法:

if ($stocksData['id'] == 1) {
  $stocksData['qty'] = 100;
}
else {
  $stocksData['qty'] = 200;
}

编辑:

对于您组合请求的特定用例,请查看以下内容:

$stocksData = $product->getStocksData();
$stocksData[1] = array(
  'stock_id' => 1,
  'qty' => 100,
);
$stocksData[2] = array(
  'stock_id' => 2,
  'qty' => 200,
);
$product->setStocksData($stocksData);
于 2013-03-10T23:45:47.090 回答