MagentoでProductのSpecial_priceをダイレクトSQLクエリを介して設定しますか?

magento.stackexchange https://magento.stackexchange.com//questions/45724

  •  12-12-2019
  •  | 
  •  

質問

私はCSVファイルから特別価格を大量に更新する必要があります(これは、SKU、特別価格、日付から/出身)。

現時点では、このようなMagento Modelsメソッドを使用して(CSV行を解析した後)foreachループで:

$p = Mage::getModel('catalog/product');
$product_id = $p->getIdBySku($product['SKU']);
if (!$product_id) {
    throw new Exception('Product Does Not Exists');
}
$p->setStoreId($store_id)->load($product_id);
$p->setSpecialPrice(floatval($product['Price']));
$p->setSpecialFromDate($product['FromDate']);
$p->setSpecialFromDateIsFormated(true);
$p->setSpecialToDate($product['ToDate']);
$p->setSpecialToDateIsFormated(true);
$p->save();
$p = null;
.

これは、一握りの製品が更新する必要があるときは大丈夫です。ただし、100以上の製品を更新すると、これが非常に遅くなり、サイトのパフォーマンスも影響します。

は、特別価格を大量インポートすることができ、直接SQLクエリを介して日付を設定することもできますか?


この問題を調査しながら、私は解決策を見つけました(この記事に基づいてhref="http://fishpig.co.uk/magento/tutorials/update-prices-sql" real="nofollou"> http://fishpig.co.uk/magento/tutorials/Update-prices-SQL このようなデータベース内のspecial_priceを直接設定すると:

注: bd _ は私のテーブルの接頭辞 です。

UPDATE bd_catalog_product_entity AS CPE
INNER JOIN bd_catalog_product_entity_decimal AS CPED ON CPED.entity_id = CPE.entity_id
SET CPED.`value` = 2.99 -- New Special Price
WHERE
    CPED.attribute_id = (
        SELECT
            attribute_id
        FROM
            bd_eav_attribute eav
        WHERE
            eav.entity_type_id = 4
        AND eav.attribute_code = 'special_price'
    )
AND CPED.store_id = 1   -- Retail Store
AND CPE.sku = 'ABS049'  -- Sku Being Updated
.

この が作動するには が表示されます(Magento UIの値が更新された値が表示されます)。これがデータベース内の特別価格を直接設定する正しい方法であるかどうかはまだ確信していません。

また、from / to日付を設定する方法をまだ取り出していません。

これに関する助けが大いに評価されます。

役に立ちましたか?

解決

$storeIdがあなたが価格を更新したいストアであると言ってみましょう。

このコードを実行する:

$id = Mage::getSingleton('catalog/product')->getIdBySku($sku);
if ($id) {
    Mage::getSingleton('catalog/product_action')->updateAttributes(
        array($id), //array with ids to update
        array( //array with attributes to update
            'special_price' => $specialPrice,
            'special_from_date' => $fromDate,
            'special_to_date' => $toDate,
        ),
        $storeId //store id to update. If you want to update the global value use 0 in here
    );
}
.

他のヒント

既存の製品を更新したい場合は、手動で変更する必要はありません。更新に必要な列としてそれらの属性のみを含める必要があるCSVをインポートするだけです。SKUは必須フィールドであるため、CSVにこれを含めることを忘れないでください。

製品を非常に速く輸入します。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top