Nhận bộ sưu tập sản phẩm với id sản phẩm


Câu trả lời:


14

Đưa ra một bộ sưu tập được tải ngay nhưng không được tải $collectionvà 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\CollectionFactoryvà 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ế:

  • Tiêm Magento\Catalog\Api\ProductRepositoryInterface\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.


1
Có thể tôi đang thiếu một cái gì đó nhưng việc sử dụng các kho lưu trữ dường như không cho phép kiểm soát hoàn toàn kết quả; ví dụ: làm thế nào để bạn thêm một thuộc tính cho các thực thể EAV? Hoặc tham gia một bảng bên ngoài? Trong trường hợp đó tôi vẫn thấy lõi Magento2 sử dụng các bộ sưu tập. Có một sự thay thế hợp lệ? Cảm ơn bạn!
Alessandro Ronchi

1
Thật không may là không có. Thường có những trường hợp bạn vẫn cần bộ sưu tập. Xem thêm: magento.stackexchange.com/a/158098/243
Fabian Schmengler

Chính xác vấn đề của tôi bây giờ. Tôi đã xây dựng một phương thức làm việc để có kết quả với kho lưu trữ và kết quả không thể sửa đổi (hoặc thậm chí đưa vào bộ sưu tập một cách gọn gàng, thiếu phương thức thêm / đặt dữ liệu ... và nhiều vấn đề khác).
LM_Fielding

9

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:

  • Magento \ Framework \ Api \ SearchCriteriaBuilder
  • Magento \ Catalog \ Api \ ProductRep repositoryInterface

Tôi muốn nhận bộ sưu tập sản phẩm từ id thực thể của mình, Vui lòng cho tôi mã đầy đủ hoặc ý tưởng!
Sushivam

0
$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;
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.