Koleksiyon kullanarak magento masasını kesmek nasıl?


23

Özel bir masam var. SQL sorgusu olmadan Magento koleksiyonunu kullanarak tabloyu kesmek istiyorum .

Birisi bazı yararlı bilgiler sağlayacaktır umuyoruz.


Bazı koşullara göre bazı satırları silmek istediğinizi mi kastediyorsunuz?
Subesh Pokhrel

Hayır, tüm kayıtları silmeye ihtiyacım var ve ayrıca Otomatik Artırma kimliği 1 ile başlar.
VijayS91

Yanıtlar:


18

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. truncateO 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();

2
Bana magento'da üç tip model söyleyebilir misiniz? Şimdiden teşekkürler
MeenakshiSundaram R

3
@MeenakshiSundaramR. Varlık modeli var. Örnek: Mage_Catalog_Model_Product. Kaynak modeli var. Örnek: Mage_Catalog_Model_Resource_Product. Ve koleksiyon kaynak modeli var Mage_Catalog_Model_Resource_Product_Collection.
Marius

2
@Marius Bana magento koleksiyonunda bulunan otomatik artış kimliğini (1 ile başlayan anlamına gelir) nasıl güncelleyebilirim?
VijayS91

2
@VijayS. Cevabımdaki güncellememe bakın.
Marius

@Marius bir şüphem var. o zaman Flat model ve EAV model nedir?
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);

Not: MySQL 1, bir tabloyu keserken otomatik ekleme değerini sıfırlar ; bu nedenle gerekli değildir, ancak changeTableAutoIncrementbirinin başka bir değerle başlaması için AI olmasını istiyorsanız faydalı olabilir.


Düzenle:

Bu soruya cevabı tamamlamak için / ... olarak etiketlendi :

  • changeTableAutoIncrement 1.8.0.1’de eklendi
  • truncateTable 1.6.0.0-alfa1 'da eklendi

-1

Bir 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();
}

1
Masayı kısmak hakkında soruyorum. Kaydı silmek için değil.
VijayS91

Aşağıdaki kodu kullanarak yapabilirsiniz. Yukarıdaki kod referansını dikkate alırsanız. $ Öğeler-> kesiği ();
Sapnandu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.