ฉันมีตารางที่กำหนดเอง ฉันต้องการตัดทอนตารางโดยใช้ Magento collectionโดยไม่มีการสืบค้น SQL
หวังว่าบางคนจะให้ข้อมูลที่เป็นประโยชน์
ฉันมีตารางที่กำหนดเอง ฉันต้องการตัดทอนตารางโดยใช้ Magento collectionโดยไม่มีการสืบค้น SQL
หวังว่าบางคนจะให้ข้อมูลที่เป็นประโยชน์
คำตอบ:
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();
}
ข้อเสียของสิ่งนี้คือมันไม่ได้รีเซ็ตรหัสเพิ่มของตาราง แต่มันปลอดภัยกว่า
แก้ไข
ในการอัปเดตรหัสเพิ่มของตารางหลักคุณสามารถเพิ่มวิธีการใหม่ในรูปแบบทรัพยากรของคุณที่ทำสิ่งนี้
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.1truncateTable
ถูกเพิ่มใน 1.6.0.0-alpha1ฉันได้สร้างแบบจำลองและสำหรับการพัฒนาบางอย่างฉันต้องใช้วิธีการลบ มันง่ายมาก ๆ. ฉันลองลบตามเงื่อนไข แต่ฉันไม่ได้รับรหัสที่แน่นอน แต่ฉันใช้รหัสต่อไปนี้ซึ่งจะตอบสนองความต้องการของคุณสำหรับการลบแบบมีเงื่อนไข
$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();
}