如何使用Magento ORM中的集合删除数据?

16

现在我正在删除数据,例如:

  $deleteCCL = Mage::getModel('crossdata/customccitem');
  $deleteCCL->load($itemId);
  $deleteCCL->delete();

有没有办法使用集合删除数据,例如:

$rcc = Mage::getModel('crossdata/customccitem')->getCollection()->delete();

?

非常感谢,

Balan

5个回答

25

没有方便的分组删除功能,因此要么将其添加到您的集合中,要么直接进行删除操作。

foreach ($rcc as $ccitem) {
    $ccitem->delete();
}

但这样会逐个删除。我们不想能够将任意集合的SQL管道传输到DELETE中,以便我们可以一次性将它们全部删除吗? - kalenjordan
@sparcksoft 您是正确的,这就是为什么我最初说您需要“将[group delete]添加到您的集合中”的原因。 - clockworkgeek
自己注意:正确地回答 RTF SO :) 今天我实现了这个,但不像我想象的那样通用。我想做的是实现一个删除方法,可以将任意 $collection 传递进去。但我不确定该怎么做,因为适配器删除方法只需要一个 $where 参数,而你需要传入一个 SQL 片段,其中可能包括 where、join、having、group 等。 - kalenjordan

4

Mage_Eav_Model_Entity_Collection_Abstract(它继承了Varien_Data_Collection_Db)提供了一个delete()方法,如果你有能力扩展它的话。

然而,它的实现基本上与你的相同:

/**
 * Delete all the entities in the collection
 *
 * @todo make batch delete directly from collection
 */
public function delete()
{
    foreach ($this->getItems() as $k=>$item) {
        $this->getEntity()->delete($item);
        unset($this->_items[$k]);
    }
    return $this;
}

1
喜欢在文档块中使用 @todo! :) - Jonathan Day

3

要在集合中实现删除功能,您需要向集合类添加一个新方法或集合继承的自定义抽象类。

示例:

public function delete()
{
    foreach ($this->getItems() as $key => $item) {
        $item->delete();
        unset($this->_items[$key]);
    }

    return $this;
}

1

感谢 @leek,我终于让我的工作起来了:

foreach( $collection as $item )
    if( <<logic>> ) $collection->getEntity()->delete( $item );

0
你可以使用集合遍历函数。
Mage::getModel('crossdata/customccitem')->getCollection()->walk('delete');

对于每个函数

Mage::getModel('crossdata/customccitem')->getCollection()->each('delete')->clear();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接