我有一个Magento的产品导入代码,它将库存(qty)分配给仓库位置(stock_id)。信息在数组中传递,但是我对数组的工作知识不是那个flash,所以我确信我没有正确地这样做。
导入目前是这样完成的,但我确信这不是最有效的,因为我保存了两次产品。
这将分配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);
我假设它是可能有所有这些信息在一个数组,但我只是不确定如何。
在php中有很多初始化数组的方法。
$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);