Magento में कई उत्पादों को हटा दें


12

क्या SKU के साथ फ़िल्टर करके कई उत्पादों को हटाने का कोई तरीका है? मेरे पास लगभग 1000 उत्पाद हैं जिन्हें मैं हटाना चाहता हूं।

जवाबों:


17

इसका सबसे तेज़ तरीका इस क्वेरी को सीधे चलाना है।

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

सब कुछ अच्छी तरह से झरना चाहिए। विशेषता मान हटा दिए जाएंगे, श्रेणी संबंध हटा दिए जाएंगे, अपशेल, क्रॉसलेस और संबंधित और इतने पर।

[संपादित करें]
इसमें एक पकड़ है। इसे खोलने के लिए STW का धन्यवाद। समीक्षा और रेटिंग अनाथ रहेगी क्योंकि उनके लिए उत्पाद तालिका के लिए कोई विदेशी कुंजी नहीं है।


5
इसके बाद फिर से देखना न भूलें (यदि आप फ्लैट उत्पाद सूची का उपयोग करते हैं)
व्लादिमीर केर्खॉफ

2
यह मूल रूप से है जो एडमिन इम्पोर्ट / एक्सपोर्ट टूल बड़े पैमाने पर डिलीट करने के लिए इसका उपयोग करता है। यह कॉलिंग की तुलना में बहुत तेज़ है, ->delete()लेकिन घटनाओं के लिए सुनने वाले किसी भी कोड को चकमा देगा। स्टॉक मैगेंटो में यह प्रतीत होता है कि समीक्षा और रेटिंग अनाथ हो जाएंगी (जब उनका संबद्ध उत्पाद होगा तो उन्हें हटाया नहीं जाएगा)।
STW

@STW। अच्छा पकड़ा। मैं समीक्षा और रेटिंग के बारे में पूरी तरह भूल गया।
मेरियस

मुझे यकीन नहीं है कि यह अच्छा विचार है या नहीं। विशेषता डेटा के बारे में जो ईव टेबल में बचा है? क्या वे भी हटाए गए हैं?
::४४ बजे अनुराग पटबन्धा

@AnuragPatbandha। सभी catalog_product_entity_*तालिकाओं में entity_idफ़ील्ड पर फ़ील्ड के लिए एक FK है catalog_product_entity.entity_id। उन्हें अच्छी तरह से झरना चाहिए।
मारियस

15

सभी Marius के प्रति सम्मान है, लेकिन कृपया डेटाबेस से सीधे संपर्क न करें यदि यह सभी परिहार्य है। हो सकता है कि संबंधित टेबल को स्वचालित रूप से अपडेट कर दिया जाए, यदि आपकी Magento की रिलीज़ और आपके सभी एक्सटेंशन सभी सही स्थानों पर बग-मुक्त हैं। लेकिन अगर वे नहीं हैं, तो उस तरह की चीज आपकी साइट को नष्ट कर सकती है।

इसके बजाय, आप Magento की अपनी CSV आयात सुविधा का उपयोग कर सकते हैं।

बस अपने SKU को एक फ़ाइल में सूचीबद्ध करें, जो सरल है:

sku
ABC1
ABC2
ABC3

...आदि। फिर CSV फ़ाइल के रूप में सहेजें।

उसके बाद, सिस्टम> आयात / निर्यात> आयात में, एंटिटी प्रकार का चयन करें: उत्पाद और आयात व्यवहार: एंटिटीज को हटाएं, और इस फाइल को आयात करें। और बस!


2
फी - आम तौर पर मैं सहमत हूं कि प्रत्यक्ष DB बातचीत से बचना सबसे अच्छा है; हालांकि यह वास्तव में है कि कैसे Magento एडमिन आयात उपकरण (देखें Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()) के माध्यम से उत्पादों को हटा देता है
STW

मान लीजिए अगर मैं चयनित स्टोर से उत्पादों को हटाना चाहता हूं, तो मेरा सीएसवी प्रारूप क्या है।
zus

यदि आप केवल चयनित स्टोर से उत्पादों को अनसाइन करना चाहते हैं, लेकिन उन्हें डेटाबेस से नहीं हटाते हैं, तो आप दो कॉलमों के साथ CSV आयात की कोशिश कर सकते हैं: स्कू और स्टोर, सुनिश्चित करें कि स्टोर कॉलम में केवल उन स्टोर आईडी शामिल हैं जिन्हें आप उत्पाद को असाइन करना चाहते हैं , आयात व्यवहार चुनें: अद्यतन करें, और आयात करें। मैंने हालांकि इसका परीक्षण नहीं किया है, इसलिए सावधानी के साथ आगे बढ़ें! (अगर मुझे समय मिलता है तो मैं इसे बाद में परीक्षण करूंगा और एक और टिप्पणी
डग मैकलीन

6

आप इसे प्रोग्रामेटिक रूप से कर सकते हैं। एक skustodelete.csv सूची को हटाए जाने के लिए सभी स्कोस बनाएं और उसके बाद यहां आगे बढ़ने के लिए कोड है

    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 द्वारा फ़िल्टर किए जाने के बाद, आप उन सभी वस्तुओं का चयन करने के लिए बायीं ओर चेकबॉक्स का उपयोग कर सकते हैं, जिन्हें आप हटाना चाहते हैं।

कई का चयन करें

ध्यान दें select allजो पूर्ण ग्रिड में सभी आइटम का select visibleचयन करेंगे और जो ग्रिड के वर्तमान पृष्ठ पर केवल आइटम का चयन करेंगे।

एक बार जब आप अपने इच्छित आइटम चुन लेते हैं, तो आप ग्रिड के ऊपरी दाएँ हाथ की तरफ बड़े पैमाने पर एक्शन बटन का उपयोग कर सकते हैं और डिलीट विकल्प का चयन कर सकते हैं।

सामूहिक कार्रवाई हटाएं

यह आपको यह सुनिश्चित करने के लिए प्रेरित करेगा कि आप इन वस्तुओं को हटाना चाहते हैं। इस पॉप-अप के लिए हां का चयन करने के बाद यह आपके आइटम को हटाने के लिए आगे बढ़ेगा। आपकी अनुक्रमणिका सेटिंग्स के आधार पर आपको इस प्रक्रिया के बाद एक पुन: सूचकांक चलाना पड़ सकता है।


2
और भयानक दक्षता के साथ सभी कार्यों का चयन करें । किसी भी प्रकार की खोज बाधाओं के बिना इसे गलती से चुनना आपके उत्पाद कैटलॉग में वास्तव में सब कुछ हटा देता है, और एक बार शुरू होने के बाद, सर्वर को मारना या डिलीट के दौरान मेमोरी से बाहर चलना ही एकमात्र ऐसी चीज है जो इसे रोकती है।
फियास्को लैब्स

3

केविन एस, आप सीएसवी फ़ाइल द्वारा उत्पाद को हटा सकते हैं। बिल्व कदम का पालन करें

चरण 1 :

एक csv फ़ाइल बनाएँ और उस स्कोस को अतीत करें जिसे आप सिस्टम से हटाना चाहते हैं। फ़ाइल का नाम 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

कैटलॉग_प्रोडक्ट_एंटिटी की विदेशी कुंजी हैं।

इसलिए जब कैटलॉग_प्रोडक्ट_एंटिटी में कोई रिकॉर्ड हटाएं, तो ऊपर दी गई तालिकाओं के कुछ रिकॉर्ड भी हटा दिए जाएंगे।

कोड (मारियस का उत्तर लागू करें) उन सभी उत्पादों को हटा दें जिनके पास Unit_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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.