0

在庫(qty)を倉庫の場所(stock_id)に割り当てるMagentoの製品インポートコードがあります。情報は配列で渡されますが、配列に関する私の実用的な知識はそれほどフラッシュではないので、これを正しく行っていないと確信しています。

インポートは現在このように行われていますが、製品を2回保存しているため、最も効率的ではないと確信しています。

これにより、ロケーション1(stock_id 1)に100の数量が割り当てられ、製品が保存され、次にロケーション2(stock_id 2)に200の数量が割り当てられ、製品が再度保存されます。

 $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);

このすべての情報を1つの配列にまとめることができると思いますが、その方法がわかりません。

4

1 に答える 1

1

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);
于 2013-03-10T23:45:47.090 に答える