¿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.


¿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();

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

-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();
}

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.