ลบหลายผลิตภัณฑ์ใน Magento


12

มีวิธีใดที่จะลบผลิตภัณฑ์หลายรายการด้วยการกรองด้วย SKU หรือไม่ ฉันมีผลิตภัณฑ์ประมาณ 1,000 รายการที่ฉันต้องการลบ

คำตอบ:


17

วิธีที่เร็วที่สุดที่จะทำคือเรียกใช้แบบสอบถามนี้โดยตรง

DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');

ทุกอย่างควรจะเป็นอย่างดี ค่าแอททริบิวจะถูกลบความสัมพันธ์ของหมวดหมู่จะถูกลบอัพเซลโลภกากบาทและที่เกี่ยวข้องเป็นต้น

[แก้ไข]
มีสิ่งที่จับได้ ขอบคุณ STW สำหรับการตรวจจับสิ่งนี้ ความเห็นและการให้คะแนนจะยังคงอยู่กับเด็กกำพร้าเนื่องจากไม่มีรหัสต่างประเทศในตารางผลิตภัณฑ์สำหรับพวกเขา


5
อย่าลืมทำดัชนีใหม่หลังจากนี้ (ถ้าคุณใช้แคตตาล็อกผลิตภัณฑ์แบบเรียบ)
Vladimir Kerkhoff

2
สิ่งนี้เป็นสิ่งที่เครื่องมือนำเข้า / ส่งออกของผู้ดูแลระบบใช้เมื่อทำการลบ มันเร็วมากเมื่อเทียบกับการโทร->delete()แต่จะหลบการฟังรหัสใด ๆ สำหรับเหตุการณ์ ในสต็อก Magento ดูเหมือนว่าความคิดเห็นและการให้คะแนนจะถูกกำพร้า (พวกเขาจะไม่ถูกลบเมื่อผลิตภัณฑ์ที่เกี่ยวข้องของพวกเขา)
STW

@STW รับได้สวย. ฉันลืมความเห็นและการให้คะแนนโดยสมบูรณ์
Marius

ฉันไม่แน่ใจว่ามันเป็นความคิดที่ดีหรือไม่ สิ่งที่เกี่ยวกับข้อมูลคุณลักษณะที่บันทึกไว้ในตาราง eav? เหล่านั้นถูกลบด้วยหรือไม่
Anurag Patbandha

@AnuragPatbandha catalog_product_entity_*ตารางทั้งหมดมี FK บนentity_idสนามไปยังcatalog_product_entity.entity_idสนาม พวกเขาควรตกลงอย่างสวยงาม
Marius

15

ทุกคนเคารพ Marius แต่โปรดอย่าโต้ตอบกับฐานข้อมูลโดยตรงหากหลีกเลี่ยงได้ อาจมีการอัปเดตตารางที่เกี่ยวข้องโดยอัตโนมัติหากการเปิดตัว Magento ของคุณและส่วนขยายทั้งหมดของคุณปราศจากข้อผิดพลาดในทุกสถานที่ที่เหมาะสม แต่ถ้าไม่ใช่สิ่งนั้นอาจทำลายเว็บไซต์ของคุณได้

แต่คุณสามารถใช้คุณสมบัตินำเข้า CSV ของ Magento ได้

เพียงแสดงรายการ SKU ของคุณในไฟล์ง่ายๆเพียง:

sku
ABC1
ABC2
ABC3

... ฯลฯ จากนั้นบันทึกเป็นไฟล์ CSV

จากนั้นในระบบ> นำเข้า / ส่งออก> นำเข้าเลือกประเภทเอนทิตี: ผลิตภัณฑ์และพฤติกรรมการนำเข้า: ลบเอนทิตีและนำเข้าไฟล์นี้ และนั่นมัน!


2
fyi - โดยทั่วไปฉันเห็นด้วยว่าการหลีกเลี่ยงการโต้ตอบโดยตรงของฐานข้อมูลนั้นดีที่สุด แต่นี่เป็นวิธีที่ Magento ลบผลิตภัณฑ์ผ่านเครื่องมือ Admin Import (ดูMage_ImportExport_Model_Import_Entity_Product::_deleteProducts())
STW

สมมติว่าฉันต้องการลบผลิตภัณฑ์จากร้านค้าที่เลือกรูปแบบ CSV ของฉันคืออะไร
zus

หากคุณต้องการยกเลิกการมอบหมายผลิตภัณฑ์จากร้านค้าที่เลือก แต่ไม่ได้ลบออกจากฐานข้อมูลคุณสามารถลองนำเข้า CSV ด้วยสองคอลัมน์: sku และร้านค้าตรวจสอบให้แน่ใจว่าคอลัมน์ร้านค้ามีเฉพาะรหัสร้านค้าที่คุณต้องการผลิตภัณฑ์ที่กำหนด เลือกนำเข้าพฤติกรรม: อัปเดตแล้วนำเข้าที่ ฉันยังไม่ได้ทดสอบสิ่งนี้ดังนั้นโปรดดำเนินการด้วยความระมัดระวัง! (ถ้าฉันหาเวลาฉันจะทดสอบในภายหลังและเพิ่มความคิดเห็นอื่น)
Doug McLean

6

คุณสามารถทำได้โดยทางโปรแกรม สร้าง skustodelete.csv แสดงรายการ skus ทั้งหมดที่จะถูกลบและหลังจากนั้นนี่คือรหัสเพื่อดำเนินการต่อไป

    require_once 'app/Mage.php';
    Mage :: app("default")->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID);
    $skuAll = array();
    $file_handle = fopen("skustodelete.csv", "r");
    $catalog = Mage::getModel('catalog/product');
   while (!feof($file_handle)) {
     $line_of_text = fgetcsv($file_handle, 1024);
     $allSku = $line_of_text[0];
     $product = $catalog->loadByAttribute('sku', $allSku);
     try {
          $product->delete();
          echo "Product with ID: " . $product->getId() . " Deleted Successfully". PHP_EOL;
     } catch (Exception $e) {
          echo "Product with ID: " . $product->getId() . "cannot be deleted" . PHP_EOL;
     }
}
echo "Finish Delete";

3

ไม่มีรหัสวิธี

ในส่วนผู้ดูแลระบบด้านล่างManage Productsจะพบกริดกับผลิตภัณฑ์ทั้งหมดของคุณ SKUมีคอลัมน์ที่เรียกว่าเป็น ที่นี่คุณสามารถกรองผลิตภัณฑ์ตามมูลค่า

ตัวกรอง sku

จากนั้นเมื่อคุณกรองตาม SKU คุณสามารถใช้ช่องทำเครื่องหมายทางด้านซ้ายมือเพื่อเลือกรายการทั้งหมดที่คุณต้องการลบ

เลือกหลายรายการ

แจ้งให้ทราบselect allว่าจะเลือกรายการทั้งหมดในตารางที่สมบูรณ์และselect visibleจะเลือกเฉพาะรายการในหน้าปัจจุบันของตาราง

เมื่อคุณเลือกรายการที่คุณต้องการคุณสามารถใช้ปุ่มการกระทำที่ด้านขวาบนของตารางและเลือกตัวเลือกการลบ

ลบการกระทำโดยรวม

นี่จะเป็นการเตือนให้คุณแน่ใจว่าคุณต้องการลบรายการเหล่านี้ หลังจากเลือกใช่ในป๊อปอัปนี้แล้วมันจะทำการลบรายการของคุณต่อไป ขึ้นอยู่กับการตั้งค่าดัชนีของคุณคุณอาจต้องเรียกใช้ดัชนีอีกครั้งหลังจากกระบวนการนี้


2
และเลือกทั้งหมดทำงานด้วยประสิทธิภาพที่น่ากลัว การเลือกโดยไม่ตั้งใจโดยไม่มีข้อ จำกัด ในการค้นหาจะเป็นการลบทุกอย่างในแคตตาล็อกผลิตภัณฑ์ของคุณอย่างแท้จริงและเมื่อเริ่มต้นแล้วการฆ่าเซิร์ฟเวอร์หรือหน่วยความจำไม่เพียงพอในระหว่างการลบนั้นเป็นสิ่งเดียวที่หยุดมัน
Fiasco Labs

3

Kevin S คุณสามารถลบผลิตภัณฑ์ด้วยไฟล์ csv เพียงทำตามขั้นตอนเป็นคลื่น

ขั้นตอนที่ 1 :

สร้างไฟล์ csv และวาง skus ที่คุณต้องการลบออกจากระบบ ตั้งชื่อไฟล์เป็นskus.csv

ขั้นตอนที่ 2 :

สร้างและแทนที่ไฟล์ php ในไดเรกทอรีรากของคุณ จากนั้นผ่านรหัสต่อไปนี้

require_once '../app/Mage.php';
Mage :: app("default") -> setCurrentStore( Mage_Core_Model_App :: ADMIN_STORE_ID );
$skuAll =array();
$file_handle = fopen("skus.csv", "r");
 while (!feof($file_handle) ) {
    $line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];

}
$products = Mage::getResourceModel('catalog/product_collection')
    ->addAttributeToSelect('*') 
    ->addAttributeToFilter(
        'sku', array('in' => $allSku)
    )
    ->load();

    if(is_array($products))
    {
        foreach ($products as $key => $pId)
        {
            try
            {
                $product = Mage::getModel('catalog/product')->load($pId)->delete();
                echo "successfully deleted product with ID: ". $pId ."<br />";
            } 
            catch (Exception $e) 
            {
                echo "Could not delete product with ID: ". $pId ."<br />";
            }
        }
    }

หมายเหตุ: ฉันแนะนำให้คุณก่อนเรียกใช้รหัสนี้คุณต้องได้รับการสำรองข้อมูล ฉันหวังว่ามันจะช่วยให้คุณ


0

เพราะตารางรายการ

  • catalog_product_entity_varchar,
  • catalog_product_entity_tier_price,
  • catalog_product_entity_media_gallery,
  • catalog_product_entity_media_gallery_value,
  • catalog_product_entity_text,
  • catalog_product_entity_group_price,
  • catalog_product_entity_datetime,
  • catalog_product_entity_decimal,
  • catalog_product_entity_int
  • catalog_category_product
  • catalog_product_link

คือกุญแจต่างประเทศของ catalog_product_entity

ดังนั้นเมื่อลบเรกคอร์ดใน catalog_product_entity เรคคอร์ดของตารางด้านบนจะถูกลบด้วย

รหัส (ใช้คำตอบของ Marius) ลบผลิตภัณฑ์ทั้งหมดที่มี entity_id <= 18069:

$adapter = $setup->getConnection("catalog_write");

$where = array(
    'entity_id <= ?' => '18069'
);

$tableCatalogProduct = Mage::getModel("catalog/product")->getResource()->getEntityTable();
$adapter->delete($tableCatalogProduct, $where);


$tableRating = Mage::getModel("rating/rating")->getResource()->getMainTable();
$adapter->delete($tableRating,  $where);

$tableRating = Mage::getModel("review/review")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.