답변:
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를 재설정하지 않는다는 것입니다. 그러나 더 안전합니다.
EDIT .
기본 테이블의 증분 ID를 업데이트하려면 이와 같은 작업을 수행하는 새 모델을 자원 모델에 추가 할 수 있습니다.
public function changeAutoIncrement($increment = 1) {
$this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}
그런 다음 코드에서 메소드를 호출하십시오.
Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();
Mage_Catalog_Model_Product
. 자원 모델이 있습니다. 예 : Mage_Catalog_Model_Resource_Product
. 그리고 콜렉션 자원 모델이 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);
참고 : MySQL 1
은 테이블을자를 때 자동 증가 값을 재설정 하므로 필요하지는 않지만 changeTableAutoIncrement
다른 값으로 AI를 시작하려는 경우 유용 할 수 있습니다.
편집하다:
이 질문은 magento-1.7 / magento-1.8 ... 로 태그되었습니다 .
changeTableAutoIncrement
1.8.0.1에 추가되었습니다truncateTable
1.6.0.0-alpha1에 추가되었습니다나는 모델을 만들었고 일부 개발을 위해 delete 메소드를 구현해야했습니다. 정말 쉬워요. 또한 조건부 삭제를 시도하지만 정확한 코드를 얻지 못했습니다. 그러나 조건부 삭제에 대한 요구 사항을 충족시키는 다음 코드를 사용하고 있습니다.
$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();
}