Come troncare la tabella magento usando collection?


23

Ho una tabella personalizzata. Voglio troncare la tabella usando la raccolta Magento senza query SQL.

Spero che qualcuno fornisca alcune informazioni utili.


Vuoi dire che vuoi eliminare alcune righe in base a qualche condizione?
Subesh Pokhrel

No, devo eliminare tutti i record e anche l'id di incremento automatico inizia con 1.
VijayS91

Risposte:


18

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' truncateistruzione 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();

2
potresti dirmi tre tipi di modelli in magento.thanks in anticipo
MeenakshiSundaram R

3
@MeenakshiSundaramR. C'è il modello di entità. Esempio: 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.
Marius

2
@Marius Puoi dirmi come aggiornare l'id di incremento automatico (significa che inizia con 1) disponibile nella raccolta magento.
VijayS91,

2
@VijayS. Vedi il mio aggiornamento alla risposta.
Marius

@Marius ho un dubbio. allora cos'è il modello Flat e il modello EAV?
Meenakshi Sundaram 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 reimposta il valore di autoincremento a 1quando tronca una tabella, quindi non è necessario, ma changeTableAutoIncrementpuò essere utile se qualcuno desidera che l'AI inizi con un altro valore.


Modificare:

Questa domanda è stata taggata con / ... solo per completare la risposta:

  • changeTableAutoIncrement è stato aggiunto in 1.8.0.1
  • truncateTable è stato aggiunto in 1.6.0.0-alpha1

-1

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

1
Sto chiedendo di troncare il tavolo. Non cancellare il record.
VijayS91,

puoi farlo usando il seguente codice. se si considera il riferimento al codice sopra riportato. $ items-> truncate ();
Sapnandu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.