Magento 2: Đi qua bộ sưu tập và xóa


8

Tôi đã tự hỏi nếu có một cách để đi qua một bộ sưu tập trên Magento 2 và xóa các mục từ cơ sở dữ liệu e.

Trong Magento 1, điều này có thể được thực hiện bằng cách làm như sau:

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

Có cách nào để đạt được điều gì đó tương tự trong Magento 2 không?

Câu trả lời:


25

8

Tôi có thể dễ dàng sai, nhưng tôi nghĩ nó phụ thuộc vào thực thể mà bạn đang làm việc. Lấy một vài tài liệu tham khảo từ cốt lõi, ví dụ:

\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');
}

Nó liên quan đến việc có thiết lập lớp dịch vụ cho thực thể hay không.


Nghe có vẻ đúng, câu trả lời của tôi là cụ thể đối với trường hợp OP vì có vẻ như anh ấy / cô ấy đã từng làm điều đó với một thực thể tùy chỉnh trở lại trong M1
Raphael tại Digital Pianism

2
Đúng, tôi rõ ràng đã đợi hàng giờ để đăng. Rất có thể là vì tôi đã quên tất cả về nó và thực sự chưa bao giờ nhấp vào "bài đăng"
đánh dấu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.