Magento 2: Gehen Sie durch die Sammlung und löschen Sie sie


8

Ich habe mich gefragt, ob es eine Möglichkeit gibt , durch eine Sammlung auf Magento 2 zu gehen und Einträge aus der Datenbank zu löschen .

In Magento 1 kann dies folgendermaßen geschehen:

Mage::getModel('foo/bar')->getCollection()
                    ->addFilter('baz', $filter)
                    ->walk('delete')

Gibt es eine Möglichkeit, in Magento 2 etwas Ähnliches zu erreichen?

Antworten:


25

8

Ich könnte mich leicht irren, aber ich denke, es hängt von der Entität ab, mit der Sie arbeiten. Nehmen Sie ein paar Referenzen aus dem Kern, zB:

\Magento\Eav\Model\Entity\Collection\AbstractCollection::delete()

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

\Magento\Customer\Controller\Adminhtml\Index\MassDelete::massAction()::

protected function massAction(AbstractCollection $collection)
{
    $customersDeleted = 0;
    foreach ($collection->getAllIds() as $customerId) {
        $this->customerRepository->deleteById($customerId);
        $customersDeleted++;
    }
    //snip...
}

\Magento\Catalog\Controller\Adminhtml\Product\MassDelete::execute()

public function execute()
{
    $collection = $this->filter->getCollection($this->collectionFactory->create());
    $productDeleted = 0;
    foreach ($collection->getItems() as $product) {
        $product->delete();
        $productDeleted++;
    }
    $this->messageManager->addSuccess(
        __('A total of %1 record(s) have been deleted.', $productDeleted)
    );

    return $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath('catalog/*/index');
}

Es kommt darauf an, ob für die Entität ein Service-Layer-Setup vorhanden ist.


Es klingt ungefähr richtig, meine Antwort war spezifisch für den OP-Fall, da es so aussieht, als hätte er / sie dies mit einer benutzerdefinierten Entität in M1
Raphael bei Digital Pianism am 2.

2
Ja, meine hat offenbar stundenlang auf die Veröffentlichung gewartet. Höchstwahrscheinlich, weil ich alles vergessen habe und nie auf "post" geklickt habe
benmarks
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.