Mam własny stół. Chcę obciąć tabelę przy użyciu kolekcji Magento bez zapytania SQL.
Mam nadzieję, że ktoś dostarczy użytecznych informacji.
Mam własny stół. Chcę obciąć tabelę przy użyciu kolekcji Magento bez zapytania SQL.
Mam nadzieję, że ktoś dostarczy użytecznych informacji.
Odpowiedzi:
Magento nie ma na to wsparcia (o ile mi wiadomo).
Ale możesz zaimplementować metodę w swoim modelu zasobów (nie w modelu zasobów kolekcji), która obetnie tabelę.
Coś takiego:
public function truncate() {
$this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
return $this;
}
Następnie możesz wywołać go w kodzie:
Mage::getResourceModel('[module]/[entity]')->truncate();
Ale to bardzo niebezpieczne podejście. Do truncate
przerwy rachunku transakcji, więc nie może być wycofana w przypadku trzeba.
Zamiast tego sugeruję usunięcie każdego elementu w tabeli.
$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
$item->delete();
}
Wadą tego jest to, że nie resetuje on identyfikatora przyrostu tabeli. Ale to jest bezpieczniejsze.
EDYCJA .
Aby zaktualizować identyfikator przyrostu tabeli głównej, możesz dodać nową metodę w modelu zasobów, która robi coś takiego.
public function changeAutoIncrement($increment = 1) {
$this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}
Następnie wywołaj metodę w kodzie:
Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();
Mage_Catalog_Model_Product
. Istnieje model zasobów. Przykład: Mage_Catalog_Model_Resource_Product
. I istnieje model zasobów kolekcji 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);
Uwaga: MySQL resetuje wartość autoinkrementacji do 1
skrótu tabeli, więc nie jest to wymagane, ale changeTableAutoIncrement
może być przydatne, jeśli ktoś chce mieć AI zaczynającą się od innej wartości.
Edytować:
To pytanie zostało oznaczone tagiem magento-1.7 / magento-1.8 ... tylko w celu uzupełnienia odpowiedzi:
changeTableAutoIncrement
został dodany w 1.8.0.1truncateTable
został dodany w wersji 1.6.0.0-alfa1Mam model i dla pewnego rozwoju musiałem zaimplementować metodę delete. To bardzo łatwe. Próbuję również usunąć warunkowego, ale nie otrzymałem dokładnego kodu. Ale używam następującego kodu, który spełni twoje wymagania dotyczące warunkowego usunięcia.
$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();
}