Ho una tabella personalizzata. Voglio troncare la tabella usando la raccolta Magento senza query SQL.
Spero che qualcuno fornisca alcune informazioni utili.
Ho una tabella personalizzata. Voglio troncare la tabella usando la raccolta Magento senza query SQL.
Spero che qualcuno fornisca alcune informazioni utili.
Risposte:
Magento non ha supporto per questo (per quanto ne so).
Ma puoi implementare un metodo nel tuo modello di risorsa (non nel modello di risorsa di raccolta) che tronca la tabella.
Qualcosa come questo:
public function truncate() {
$this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
return $this;
}
Quindi puoi chiamarlo nel tuo codice:
Mage::getResourceModel('[module]/[entity]')->truncate();
Ma questo è un approccio molto pericoloso. L' truncate
istruzione interrompe la transazione, quindi non può essere ripristinata nel caso sia necessario.
Suggerisco invece di eliminare tutte le entità nella tabella.
$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
$item->delete();
}
Il lato negativo di questo è che non reimposta l'id di incremento della tabella. Ma è più sicuro.
EDIT .
Per aggiornare l'id di incremento della tabella principale è possibile aggiungere un nuovo metodo nel modello di risorsa che esegua operazioni simili.
public function changeAutoIncrement($increment = 1) {
$this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}
Quindi chiama il tuo metodo nel codice:
Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();
Mage_Catalog_Model_Product
. C'è il modello di risorsa. Esempio: Mage_Catalog_Model_Resource_Product
. E c'è il modello delle risorse di raccolta 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);
Nota: MySQL reimposta il valore di autoincremento a 1
quando tronca una tabella, quindi non è necessario, ma changeTableAutoIncrement
può essere utile se qualcuno desidera che l'AI inizi con un altro valore.
Modificare:
Questa domanda è stata taggata con magento-1.7 / magento-1.8 ... solo per completare la risposta:
changeTableAutoIncrement
è stato aggiunto in 1.8.0.1truncateTable
è stato aggiunto in 1.6.0.0-alpha1Ho creato un modello e per qualche sviluppo ho dovuto implementare il metodo di eliminazione. È molto facile. Provo anche per l'eliminazione condizionale ma non ho ricevuto il codice esatto. Ma sto usando il seguente codice che soddisferà i tuoi requisiti per l'eliminazione condizionale.
$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();
}