Özel bir masam var. SQL sorgusu olmadan Magento koleksiyonunu kullanarak tabloyu kesmek istiyorum .
Birisi bazı yararlı bilgiler sağlayacaktır umuyoruz.
Özel bir masam var. SQL sorgusu olmadan Magento koleksiyonunu kullanarak tabloyu kesmek istiyorum .
Birisi bazı yararlı bilgiler sağlayacaktır umuyoruz.
Yanıtlar:
Magento bunun için bir desteğe sahip değil (bildiğim kadarıyla).
Ancak kaynak modelinizde (kaynak modelini değil) tabloyu kesecek bir yöntem uygulayabilirsiniz.
Bunun gibi bir şey:
public function truncate() {
$this->_getWriteAdapter()->query('TRUNCATE TABLE '.$this->getMainTable());
return $this;
}
Ardından kodunuzla arayabilirsiniz:
Mage::getResourceModel('[module]/[entity]')->truncate();
Fakat bu çok tehlikeli bir yaklaşım. truncate
O durumda geri alınamaz böylece deyim sonları işlem yapmanız gerekenler.
Tablodaki her varlığı silmeyi öneririm.
$collection = Mage::getModel('[module]/[entity]')->getCollection();
foreach ($collection as $item) {
$item->delete();
}
Bunun aşağı tarafı, tablonun artış kimliğini sıfırlamamasıdır. Ama daha güvenli.
EDIT .
Ana tablonun artış kimliğini güncellemek için, kaynak modelinizde böyle bir şey yapan yeni bir yöntem ekleyebilirsiniz.
public function changeAutoIncrement($increment = 1) {
$this->_getWriteAdapter()->query('ALTER TABLE '.$this->getMainTable().' AUTO_INCREMENT = '. $increment);
}
Ardından, kodunuzu kullanarak yönteminizi çağırın:
Mage::getResourceModel('[module]/[entity]')->changeAutoIncrement();
Mage_Catalog_Model_Product
. Kaynak modeli var. Örnek: Mage_Catalog_Model_Resource_Product
. Ve koleksiyon kaynak modeli var 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);
Not: MySQL 1
, bir tabloyu keserken otomatik ekleme değerini sıfırlar ; bu nedenle gerekli değildir, ancak changeTableAutoIncrement
birinin başka bir değerle başlaması için AI olmasını istiyorsanız faydalı olabilir.
Düzenle:
Bu soruya cevabı tamamlamak için magento-1.7 / magento-1.8 ... olarak etiketlendi :
changeTableAutoIncrement
1.8.0.1’de eklenditruncateTable
1.6.0.0-alfa1 'da eklendiBir Model yarattım ve bazı geliştirmeler için delete metodunu uygulamak zorunda kaldım. Bu çok kolay. Ayrıca koşullu silme işlemini de denedim, ancak tam kodu alamadım. Ancak şartlı silme gereksiniminizi yerine getirecek olan aşağıdaki kodu kullanıyorum.
$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();
}