Tengo una mesa personalizada. Quiero truncar la tabla usando la colección Magento sin consulta SQL.
Espero que alguien proporcione alguna información útil.
Tengo una mesa personalizada. Quiero truncar la tabla usando la colección Magento sin consulta SQL.
Espero que alguien proporcione alguna información útil.
Respuestas:
Magento no tiene soporte para esto (que yo sepa).
Pero puede implementar un método en su modelo de recurso (no el modelo de recurso de recopilación) que truncará la tabla.
Algo como esto:
public function truncate() {
$this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
return $this;
}
Entonces puedes llamarlo en tu código:
Mage::getResourceModel('[module]/[entity]')->truncate();
Pero este es un enfoque muy peligroso. La truncate
declaración interrumpe la transacción, por lo que no puede revertirse en caso de que lo necesite.
Sugiero eliminar todas las entidades en la tabla en su lugar.
$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
$item->delete();
}
La desventaja de esto es que no restablece el ID de incremento de la tabla. Pero es más seguro.
EDITAR .
Para actualizar el ID de incremento de la tabla principal, puede agregar un nuevo método en su modelo de recursos que haga algo como esto.
public function changeAutoIncrement($increment = 1) {
$this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}
Luego llame a su método en el código:
Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();
Mage_Catalog_Model_Product
. Existe el modelo de recursos. Ejemplo: Mage_Catalog_Model_Resource_Product
. Y existe el modelo de recursos de recolección 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 restablece el valor de incremento automático 1
al truncar una tabla, por lo que no es obligatorio, pero changeTableAutoIncrement
puede ser útil si alguien quiere que la IA comience con otro valor.
Editar:
Esta pregunta fue etiquetada con magento-1.7 / magento-1.8 ... solo para completar la respuesta:
changeTableAutoIncrement
fue agregado en 1.8.0.1truncateTable
fue agregado en 1.6.0.0-alpha1He creado un modelo y para algún desarrollo tuve que implementar el método de eliminación. Es muy fácil. También trato de eliminar condicional pero no obtuve el código exacto. Pero estoy usando el siguiente código que cumplirá con su requisito de eliminación condicional.
$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();
}