Como truncar tabela magento usando coleção?

23

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.

VijayS91
fonte
Você quer excluir algumas linhas com base em alguma condição?
Subche Pokhrel 03/03
Não, eu preciso excluir todos os registros e também Auto Incremento início id com 1.
VijayS91

Respostas:

18

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 truncateextrato 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();
Marius
fonte
2
você poderia me dizer três tipos de modelos em magento.thanks com antecedência
MeenakshiSundaram R
3
@MeenakshiSundaramR. Existe o modelo de entidade. Exemplo: 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.
Marius
2
@ Marius Você pode me dizer como atualizar o ID de incremento automático (significa começar com 1) disponível na coleção magento.
precisa saber é o seguinte
2
@VijayS. Veja minha atualização para a resposta.
Marius
@ Marius eu tenho uma dúvida. então o que é modelo plano e modelo EAV?
precisa
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: O MySQL redefine o valor de incremento automático para 1quando truncar uma tabela, portanto não é necessário, mas changeTableAutoIncrementpode ser útil se alguém quiser ter AI iniciando com outro valor.


Editar:

Esta questão foi marcada com / ... apenas para completar a resposta:

  • changeTableAutoIncrement foi adicionado em 1.8.0.1
  • truncateTable foi adicionado em 1.6.0.0-alpha1
sv3n
fonte
-1

Eu 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();
}
Sapnandu
fonte
1
Estou perguntando sobre truncar a mesa. Não para excluir o registro.
VijayS91
você pode fazer usando o seguinte código. se você considerar a referência de código acima. $ items-> truncate ();
Sapnandu