Tôi có một bảng tùy chỉnh. Tôi muốn cắt bớt bảng bằng bộ sưu tập Magento mà không cần truy vấn SQL.
Hy vọng ai đó sẽ cung cấp một số thông tin hữu ích.
Tôi có một bảng tùy chỉnh. Tôi muốn cắt bớt bảng bằng bộ sưu tập Magento mà không cần truy vấn SQL.
Hy vọng ai đó sẽ cung cấp một số thông tin hữu ích.
Câu trả lời:
Magento không có hỗ trợ cho việc này (theo như tôi biết).
Nhưng bạn có thể thực hiện một phương thức trong mô hình tài nguyên của bạn (không phải mô hình tài nguyên bộ sưu tập) sẽ cắt bớt bảng.
Một cái gì đó như thế này:
public function truncate() {
$this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
return $this;
}
Sau đó, bạn có thể gọi nó trong mã của bạn:
Mage::getResourceModel('[module]/[entity]')->truncate();
Nhưng đây là một cách tiếp cận rất nguy hiểm. Các truncate
vi phạm tuyên bố giao dịch, vì vậy nó không thể được cuộn lại trong trường hợp bạn cần.
Tôi đề nghị xóa mọi thực thể trong bảng thay thế.
$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
$item->delete();
}
Mặt trái của điều này là nó không thiết lập lại id tăng của bảng. Nhưng nó an toàn hơn.
CHỈNH SỬA .
Để cập nhật id gia tăng của bảng chính, bạn có thể thêm một phương thức mới trong mô hình tài nguyên của mình, thực hiện một cái gì đó như thế này.
public function changeAutoIncrement($increment = 1) {
$this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}
Sau đó gọi phương thức của bạn trong mã:
Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();
Mage_Catalog_Model_Product
. Có mô hình tài nguyên. Ví dụ : Mage_Catalog_Model_Resource_Product
. Và có mô hình tài nguyên thu thập 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);
Lưu ý: MySQL đặt lại giá trị tự động thành 1
khi cắt bớt bảng, do đó không bắt buộc, nhưng changeTableAutoIncrement
có thể hữu ích nếu ai đó muốn có AI bắt đầu bằng giá trị khác.
Chỉnh sửa:
Câu hỏi này đã được gắn thẻ với magento-1.7 / magento-1.8 ... chỉ để hoàn thành câu trả lời:
changeTableAutoIncrement
đã được thêm vào 1.8.0.1truncateTable
đã được thêm vào 1.6.0.0-alpha1Tôi đã tạo một Mô hình và để phát triển, tôi phải thực hiện phương pháp xóa. Nó rất dễ. Tôi cũng cố gắng xóa điều kiện nhưng tôi không nhận được mã chính xác. Nhưng tôi đang sử dụng đoạn mã sau đây sẽ đáp ứng yêu cầu xóa điều kiện của bạn.
$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();
}