Direct SQL 쿼리를 통해 Magento에서 제품의 Special_PRICE를 어떻게 설정합니까?

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

  •  12-12-2019
  •  | 
  •  

문제

CSV 파일에서 특별 가격을 대량 업데이트해야합니다 (SKU, 특별 가격, 즉석에 특별 가격, 즉 /부터).

지금당한 Magento 모델 방법을 사용하여 (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 쿼리를 통해 날짜를 설정할 수 있습니까?


이 문제를 연구하면서 가능한 해결책을 발견했지만 (이 기사를 기반으로 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는 가격을 업데이트하려는 가게입니다. $specialPrice는 특별 가격이며, $sku는 제품 SKU, $fromDate$toDate입니다 ... 음, 당신은 그 아이디어를 얻습니다.

이제이 코드를 실행하십시오.

$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