Câu trả lời:
Đưa ra một bộ sưu tập được tải ngay nhưng không được tải $collection
và một loạt các id sản phẩm $productIds
, bạn có thể sử dụng addIdFilter()
giống như trong Magento 1:
$collection->addIdFilter($productIds);
Để khởi tạo một bộ sưu tập, bạn có thể tiêm \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
và sau đó sử dụng
$collection = $this->collectionFactory->create();
Nhưng điều này không được khuyến khích thực hành nữa!
Trong Magento 2, bạn không nên suy nghĩ quá nhiều về các bộ sưu tập nữa khi sử dụng các mô-đun cốt lõi, chúng chỉ là một chi tiết triển khai. Sử dụng các hợp đồng dịch vụ thay thế:
Magento\Catalog\Api\ProductRepositoryInterface
và\Magento\Framework\Api\SearchCriteriaBuilder
use Magento\Framework\Api\Filter;
Xây dựng tiêu chí tìm kiếm và chuyển nó tới $productRepository->getList()
:
$searchCriteria = $this->searchCriteriaBuilder->addFilter(new Filter([
Filter::KEY_FIELD => 'entity_id',
Filter::KEY_CONDITION_TYPE => 'in',
Filter::KEY_VALUE => $productIds
]))->create();
$products = $this->productRepository->getList($searchCriteria)->getItems();
$products
sau đó là một loạt các sản phẩm.
Sử dụng SearchCriteria và kho sản phẩm:
$productIds = [.....];
$searchCriteria = $this->searchCriteriaBuilder
->addFilter('entity_id', $productIds, 'in')
->create();
$products = $this->productRepositoryInterface->getList($searchCriteria)->getItems();
Để có được tiêu chí tìm kiếm của người xây dựng và đối tượng lưu trữ sản phẩm, bạn phải yêu cầu:
$porductIds=array(2,6,7);
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
$collectionByIds = $productCollection->addAttributeToSelect('*');
$collectionByIds->addFieldToFilter('entity_id', array('in' => $data));
$collectionByIds->load();
foreach ($collectionByIds as $collection) :
echo "<pre>";
print_r($collection->getName());
endforeach;