मेरे पास एक कस्टम टेबल है। मैं SQL क्वेरी के बिना Magento संग्रह का उपयोग कर तालिका को छोटा करना चाहता हूं ।
आशा है कि कोई व्यक्ति कुछ उपयोगी जानकारी प्रदान करेगा।
मेरे पास एक कस्टम टेबल है। मैं SQL क्वेरी के बिना Magento संग्रह का उपयोग कर तालिका को छोटा करना चाहता हूं ।
आशा है कि कोई व्यक्ति कुछ उपयोगी जानकारी प्रदान करेगा।
जवाबों:
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();
Mage_Catalog_Model_Product। संसाधन मॉडल है। उदाहरण: Mage_Catalog_Model_Resource_Product। और संग्रह संसाधन मॉडल है Mage_Catalog_Model_Resource_Product_Collection।
$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उपयोगी हो सकता है यदि कोई एआई दूसरे मूल्य के साथ शुरू करना चाहता है।
संपादित करें:
इस सवाल को magento-1.7 / magento-1.8 के साथ टैग किया गया ... बस जवाब पूरा करने के लिए:
changeTableAutoIncrement 1.8.0.1 में जोड़ा गया थाtruncateTable 1.6.0.0-अल्फ़ा 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();
}