当前位置: 首页>>WEB开发>>正文


如何使用集合截断magento表?

webfans WEB开发 , , , , 去评论

问题描述

我有一个自定义表。我想在没有SQL查询的情况下使用Magento集合截断表。

希望有人能提供一些有用的信息。

最佳解决方法

Magento没有这方面的支持(据我所知)。但是,您可以在资源模型(而不是集合资源模型)中实现将截断表的方法。像这样的东西:

public function truncate() {
    $this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
    return $this;
}

然后你可以在你的代码中调用它:

Mage::getResourceModel('[module]/[entity]')->truncate();

但这是一种非常危险的方法。 truncate语句会中断事务,因此无法在需要时回滚它。我建议删除表中的每个实体。

$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
    $item->delete();
}

这样做的缺点是它不会重置表的增量id。但它更安全。

编辑。要更新主表的增量ID,您可以在资源模型中添加一个类似于此的新方法。

public function changeAutoIncrement($increment = 1) {
    $this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}

然后在代码中调用您的方法:

Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();

次佳解决方法

$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);

注意:当截断表时,MySQL会将自动增量值重置为1,因此不需要它,但如果有人想让AI以其他值开头,则changeTableAutoIncrement可能很有用。


编辑:

此问题被标记为magento-1.7 /magento-1.8 …只是为了完成答案:

  • changeTableAutoIncrement在1.8.0.1中添加

  • truncateTable以1.6.0.0-α1加入

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2877.html,转载请务必附带本地址声明。