Saya punya tabel khusus. Saya ingin memotong tabel menggunakan koleksi Magento tanpa query SQL.
Semoga seseorang akan memberikan beberapa informasi yang bermanfaat.
Saya punya tabel khusus. Saya ingin memotong tabel menggunakan koleksi Magento tanpa query SQL.
Semoga seseorang akan memberikan beberapa informasi yang bermanfaat.
Jawaban:
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 truncate
pernyataan 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();
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
.
$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 1
ketika memotong tabel, jadi itu tidak diperlukan, tetapi changeTableAutoIncrement
mungkin berguna jika seseorang ingin memiliki AI dimulai dengan nilai lain.
Edit:
Pertanyaan ini ditandai dengan magento-1.7 / magento-1.8 ... hanya untuk melengkapi jawabannya:
changeTableAutoIncrement
telah ditambahkan di 1.8.0.1truncateTable
ditambahkan dalam 1.6.0.0-alpha1Saya 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();
}