Eu tenho uma tabela personalizada. Eu quero truncar a tabela usando a coleção Magento sem consulta SQL.
Espero que alguém forneça algumas informações úteis.
Eu tenho uma tabela personalizada. Eu quero truncar a tabela usando a coleção Magento sem consulta SQL.
Espero que alguém forneça algumas informações úteis.
Respostas:
Magento não tem suporte para isso (tanto quanto eu sei).
Mas você pode implementar um método em seu modelo de recursos (não no modelo de recursos de coleção) que truncará a tabela.
Algo assim:
public function truncate() {
$this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
return $this;
}
Então você pode chamá-lo em seu código:
Mage::getResourceModel('[module]/[entity]')->truncate();
Mas esta é uma abordagem muito perigosa. O truncate
extrato quebra a transação, portanto não pode ser revertida caso seja necessário.
Sugiro excluir todas as entidades da tabela.
$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
$item->delete();
}
O lado negativo disso é que ele não redefine o ID de incremento da tabela. Mas é mais seguro.
EDIT .
Para atualizar o ID de incremento da tabela principal, você pode adicionar um novo método no seu modelo de recursos que faça algo assim.
public function changeAutoIncrement($increment = 1) {
$this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}
Em seguida, chame seu método no código:
Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();
Mage_Catalog_Model_Product
. Existe o modelo de recursos. Exemplo: Mage_Catalog_Model_Resource_Product
. E existe o modelo de recurso de coleção 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: O MySQL redefine o valor de incremento automático para 1
quando truncar uma tabela, portanto não é necessário, mas changeTableAutoIncrement
pode ser útil se alguém quiser ter AI iniciando com outro valor.
Editar:
Esta questão foi marcada com magento-1.7 / magento-1.8 ... apenas para completar a resposta:
changeTableAutoIncrement
foi adicionado em 1.8.0.1truncateTable
foi adicionado em 1.6.0.0-alpha1Eu criei um modelo e, para algum desenvolvimento, tive que implementar o método delete. Isso é muito fácil. Também tento excluir condicionalmente, mas não recebi o código exato. Mas estou usando o código a seguir, que atenderá aos seus requisitos para exclusão 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();
}