Bagaimana cara memotong tabel magento menggunakan koleksi?

23

Saya punya tabel khusus. Saya ingin memotong tabel menggunakan koleksi Magento tanpa query SQL.

Semoga seseorang akan memberikan beberapa informasi yang bermanfaat.

VijayS91
sumber
Apakah Anda bermaksud menghapus beberapa baris berdasarkan kondisi tertentu?
Subesh Pokhrel
Tidak, saya perlu menghapus semua catatan dan juga Auto Inc increment mulai dengan 1.
VijayS91

Jawaban:

18

Magento tidak memiliki dukungan untuk ini (sejauh yang saya tahu).
Tetapi Anda bisa menerapkan metode dalam model sumber daya Anda (bukan model sumber daya koleksi) yang akan memotong tabel.
Sesuatu seperti ini:

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

Kemudian Anda dapat menyebutnya dalam kode Anda:

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

Tetapi ini adalah pendekatan yang sangat berbahaya. The truncatepernyataan istirahat transaksi, sehingga tidak dapat digulung kembali kasus Anda perlu.
Saya sarankan menghapus setiap entitas di tabel sebagai gantinya.

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

Sisi bawahnya adalah ini tidak me-reset id kenaikan tabel. Tapi ini lebih aman.

EDIT .
Untuk memperbarui id kenaikan tabel utama Anda bisa menambahkan metode baru dalam model sumber daya Anda yang melakukan sesuatu seperti ini.

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

Kemudian panggil metode Anda dalam kode:

Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();
Marius
sumber
2
dapatkah Anda memberi tahu saya tiga jenis model di magento.thanks in advance
MeenakshiSundaram R
3
@MeenakshiSundaramR. Ada model entitas. Contoh: Mage_Catalog_Model_Product. Ada model sumber daya. Contoh: Mage_Catalog_Model_Resource_Product. Dan ada model koleksi sumber daya Mage_Catalog_Model_Resource_Product_Collection.
Marius
2
@Marius Bisakah Anda memberi tahu saya Cara memperbarui id kenaikan otomatis (artinya mulai dengan 1) tersedia di koleksi magento.
VijayS91
2
@ VijayS. Lihat pembaruan saya untuk jawabannya.
Marius
@Marius saya punya satu keraguan. lalu apa itu model Flat dan model EAV?
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);

Catatan: MySQL me-reset nilai autoincrement ke 1ketika memotong tabel, jadi itu tidak diperlukan, tetapi changeTableAutoIncrementmungkin berguna jika seseorang ingin memiliki AI dimulai dengan nilai lain.


Edit:

Pertanyaan ini ditandai dengan / ... hanya untuk melengkapi jawabannya:

  • changeTableAutoIncrement telah ditambahkan di 1.8.0.1
  • truncateTable ditambahkan dalam 1.6.0.0-alpha1
sv3n
sumber
-1

Saya telah membuat Model dan untuk beberapa pengembangan saya harus mengimplementasikan metode delete. Ini sangat mudah. Saya juga mencoba untuk menghapus bersyarat tetapi saya tidak mendapatkan kode yang tepat. Tetapi saya menggunakan kode berikut yang akan memenuhi persyaratan Anda untuk penghapusan bersyarat.

$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
sumber
1
Saya bertanya tentang memotong meja. Bukan untuk menghapus catatan.
VijayS91
Anda dapat melakukannya dengan menggunakan kode berikut. jika Anda mempertimbangkan referensi kode di atas. $ items-> truncate ();
Sapnandu