У мене є власна таблиця. Я хочу обрізати таблицю за допомогою колекції Magento без запиту SQL.
Сподіваюся, хтось надасть корисну інформацію.
У мене є власна таблиця. Я хочу обрізати таблицю за допомогою колекції Magento без запиту 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();
}
Нижня частина цього полягає в тому, що він не скидає ідентифікаційний приріст таблиці. Але це безпечніше.
EDIT .
Щоб оновити ідентифікаційний приріст головної таблиці, ви можете додати новий метод у вашу модель ресурсів, який робить щось подібне.
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-альфа1Я створив Модель і для певної розробки мені довелося реалізувати метод видалення. Це дуже просто. Я також намагаюся умовно видалити, але я не отримав точного коду. Але я використовую наступний код, який виконає вашу вимогу щодо умовного видалення.
$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();
}