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?

Richard Cripps
quelle

Antworten:

25

Es ist die gleiche Methode in M2, die Sie ausführen können

$collection->walk('delete');

Einige Beispiele aus nativen Magento 2-Dateien:

Raphael beim digitalen Pianismus
quelle
Wirklich schätzen!
Kapil Yadav
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.

Benmarks
quelle
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