कैसे संग्रह का उपयोग कर Magento तालिका को छोटा करने के लिए?


23

मेरे पास एक कस्टम टेबल है। मैं SQL क्वेरी के बिना Magento संग्रह का उपयोग कर तालिका को छोटा करना चाहता हूं ।

आशा है कि कोई व्यक्ति कुछ उपयोगी जानकारी प्रदान करेगा।


क्या आपका मतलब है कि आप कुछ शर्त के आधार पर कुछ पंक्तियों को हटाना चाहते हैं?
सुबेश पोखरेल

नहीं, मुझे सभी रिकॉर्ड्स को हटाने की जरूरत है और साथ ही ऑटो इंक्रीमेंट आईडी 1 से शुरू करना होगा
विजय

जवाबों:


18

Magento के पास इसके लिए कोई समर्थन नहीं है (जहाँ तक मुझे पता है)।
लेकिन आप अपने संसाधन मॉडल (संग्रह संसाधन मॉडल नहीं) में एक विधि लागू कर सकते हैं जो तालिका को छोटा कर देगा।
कुछ इस तरह:

public function truncate() {
    $this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
    return $this;
}

तब आप इसे अपने कोड में कॉल कर सकते हैं:

Mage::getResourceModel('[module]/[entity]')->truncate();

लेकिन यह एक बहुत ही खतरनाक दृष्टिकोण है। truncateबयान टूटता लेन-देन है, इसलिए इसे मामले में वापस नहीं किया जा सकता है आप की जरूरत है।
मैं इसके बजाय तालिका में हर इकाई को हटाने का सुझाव देता हूं।

$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
    $item->delete();
}

इसका निचला पक्ष यह है कि यह तालिका की वेतन वृद्धि आईडी को रीसेट नहीं करता है। लेकिन यह अधिक सुरक्षित है।

संपादित करें
मुख्य तालिका की वेतन वृद्धि आईडी को अद्यतन करने के लिए आप अपने संसाधन मॉडल में एक नई विधि जोड़ सकते हैं जो कुछ इस तरह से होती है।

public function changeAutoIncrement($increment = 1) {
    $this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}

फिर कोड में अपने तरीके को कॉल करें:

Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();

2
तुम मुझे magento.thanks में मॉडल के तीन प्रकार बता सकते हैं अग्रिम में
Meenakshisundaram आर

3
@MeenakshiSundaramR। इकाई मॉडल है। उदाहरण: Mage_Catalog_Model_Product। संसाधन मॉडल है। उदाहरण: Mage_Catalog_Model_Resource_Product। और संग्रह संसाधन मॉडल है Mage_Catalog_Model_Resource_Product_Collection
मेरियस

2
@ मार्स क्या आप मुझे बता सकते हैं कि ऑटो इंक्रीमेंट आईडी (इसके साधनों की शुरुआत 1 से कैसे करें) अपडेट करें।
VijayS91

2
@VijayS। उत्तर के लिए मेरा अपडेट देखें।
मेरियस

@ मेरी एक शंका है। फिर फ्लैट मॉडल और ईएवी मॉडल क्या है?
मीनाक्षीसुंदरम आर

11
$model = Mage::getModel('[module]/[model]');
$resource = $model->getResource();
$connection = $resource->getReadConnection();
/* @see Varien_Db_Adapter_Pdo_Mysql */
$connection->truncateTable($resource->getMainTable());
$connection->changeTableAutoIncrement($resource->getMainTable(), 1);

नोट: MySQL 1एक तालिका को काटते समय ऑटोइन्क्रिमेंट मान को रीसेट करता है , इसलिए इसकी आवश्यकता नहीं है, लेकिन changeTableAutoIncrementउपयोगी हो सकता है यदि कोई एआई दूसरे मूल्य के साथ शुरू करना चाहता है।


संपादित करें:

इस सवाल को / साथ टैग किया गया ... बस जवाब पूरा करने के लिए:

  • changeTableAutoIncrement 1.8.0.1 में जोड़ा गया था
  • truncateTable 1.6.0.0-अल्फ़ा 1 में जोड़ा गया था

-1

मैंने एक मॉडल बनाया है और कुछ विकास के लिए मुझे डिलीट विधि को लागू करना पड़ा। यह बहुत आसान है। मैं सशर्त हटाने के लिए भी प्रयास करता हूं लेकिन मुझे सटीक कोड नहीं मिला। लेकिन मैं निम्नलिखित कोड का उपयोग कर रहा हूं जो सशर्त हटाने के लिए आपकी आवश्यकता को पूरा करेगा।

$items = Mage::getModel('custom/csaabandonedcart')->getCollection()
    ->addFieldToFilter('csa_id',Mage::getSingleton('customer/session')
    ->getCustomerId())->addFieldToFilter('customer_id', $retailer)
    ->addFieldToFilter('product_id', $spid);

foreach ($items as $item) {
        $item->delete();
}

1
मैं टेबल को छोटा करने के बारे में पूछ रहा हूं। रिकॉर्ड हटाने के लिए नहीं।
VijayS91

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