¿Cómo truncar la tabla magento usando la colección?

23

Tengo una mesa personalizada. Quiero truncar la tabla usando la colección Magento sin consulta SQL.

Espero que alguien proporcione alguna información útil.

VijayS91
fuente
¿Quiere decir que desea eliminar algunas filas en función de alguna condición?
Subesh Pokhrel
No, necesito eliminar todos los registros y también el ID de incremento automático comienza con 1.
VijayS91

Respuestas:

18

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 truncatedeclaració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();
Marius
fuente
2
¿podría decirme tres tipos de modelos en magento? Gracias de antemano
MeenakshiSundaram R
3
@MeenakshiSundaramR. Existe el modelo de entidad. Ejemplo: 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.
Marius
2
@ Mario ¿Puede decirme cómo actualizar la identificación de incremento automático (significa comenzar con 1) disponible en la colección magento.
VijayS91
2
@VijayS. Vea mi actualización de la respuesta.
Marius
@ Mario tengo una duda. entonces, ¿qué es el modelo Flat y el modelo EAV?
MeenakshiSundaram R
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);

Nota: MySQL restablece el valor de incremento automático 1al truncar una tabla, por lo que no es obligatorio, pero changeTableAutoIncrementpuede ser útil si alguien quiere que la IA comience con otro valor.


Editar:

Esta pregunta fue etiquetada con / ... solo para completar la respuesta:

  • changeTableAutoIncrement fue agregado en 1.8.0.1
  • truncateTable fue agregado en 1.6.0.0-alpha1
sv3n
fuente
-1

He 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();
}
Sapnandu
fuente
1
Estoy preguntando sobre truncar la tabla. No borrar el registro.
VijayS91
puedes hacerlo usando el siguiente código. si considera la referencia de código anterior. $ items-> truncate ();
Sapnandu