Tải lại bộ sưu tập


9

Có bất kỳ cơ hội để tải lại bộ sưu tập trong Magento 2 không?

Ví dụ:


foreach($items as $singleItems){
    $collection = $this->_myCollection->addFieldToFilter('filed', $singleItems->something);
...
}

Đối với mỗi lần lặp, tôi cần thu thập rõ ràng và tải thêm một lần nữa .

Câu trả lời:


15

Để xóa bộ sưu tập, bạn có thể gọi:

$this->_myCollection->clear();

Để tải lại bộ sưu tập, bạn có thể gọi:

$this->_myCollection->load();

5
Lưu ý rằng loadkhông có trước đó clearthì không có gì nếu bộ sưu tập đã được tải.
Fabian Schmengler

1
@fschmengler hoàn toàn bạn thường thấy cả hai dòng này nối tiếp nhau khi cần tải lại
Raphael tại Digital Pianism

2
Có lẽ bạn nên thêm một ví dụ đầy đủ vào câu trả lời:foreach($items as $singleItems){ $collection = $this->_myCollection ->clear() ->addFieldToFilter('filed', $singleItems->something) ->load(); }
Siarhey Uchukhlebau

7

Nếu bạn đã áp dụng các bộ lọc, bạn có thể đặt lại bộ sưu tập với:

$this->_myCollection->clear()->getSelect()->reset(\Zend_Db_Select::WHERE);

Sau đó :

$this->_myCollection->addFieldToFilter('field', $singleItems->getSomething());
$this->_myCollection->load();

1
Điều này được làm việc như quyến rũ. upvote (Y) Cảm ơn :)
Ashish Raj

0

bạn có thể sử dụng CollectionFactory dụ Collection. lớp nhà máy bằng cách tạo phương thức mỗi lần tạo một đối tượng mới mà không có dữ liệu gần đây


có nhưng bạn không muốn tiếp tục tạo các đối tượng, đặc biệt là trong một vòng lặp, trừ khi có trường hợp lớp đang sử dụng lại đối tượng hiện có đằng sau hậu trường.
NathanielR
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.