Làm thế nào để cắt ngắn bảng magento bằng cách sử dụng bộ sưu tập?


23

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.


Bạn có nghĩa là bạn muốn xóa một số hàng dựa trên một số điều kiện?
Subesh Pokhrel

Không, tôi cần xóa tất cả các bản ghi và id Tự động tăng bắt đầu bằng 1.
VijayS91

Câu trả lời:


18

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 truncatevi 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();

2
bạn có thể cho tôi biết ba loại mô hình trong magento không. Cảm ơn trước
MeenakshiSundaram R

3
@MeenakshiSundaramR. Có mô hình thực thể. Ví dụ : 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.
Marius

2
@Marius Bạn có thể cho tôi biết Cách cập nhật id tăng tự động (nghĩa là bắt đầu bằng 1) có sẵn trong bộ sưu tập magento.
VijayS91 ngày

2
@VijayS. Xem cập nhật của tôi để trả lời.
Marius

@Marius tôi có một nghi ngờ. Vậy mô hình phẳng và mô hình EAV là gì?
MeenakshiSundaram R

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

Lưu ý: MySQL đặt lại giá trị tự động thành 1khi cắt bớt bảng, do đó không bắt buộc, nhưng changeTableAutoIncrementcó 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 / ... chỉ để hoàn thành câu trả lời:

  • changeTableAutoIncrement đã được thêm vào 1.8.0.1
  • truncateTable đã được thêm vào 1.6.0.0-alpha1

-1

Tô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();
}

1
Tôi đang hỏi về việc cắt ngắn bảng. Không xóa hồ sơ.
VijayS91

bạn có thể làm bằng cách sử dụng mã sau đây. nếu bạn xem xét các tham chiếu mã trên. $ mục-> cắt ngắn ();
Sapnandu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.