You can retrieve all the products assigned to a specific category by category id in Magento 2.
Used interface:
Magento\Catalog\Api\CategoryLinkManagementInterface
Get Method from the interface to fetch a list of all the products, public function getAssignedProducts($categoryId);
<?php namespace Jesadiya\Product\Model; use Exception; use Magento\Catalog\Api\CategoryLinkManagementInterface; use Magento\Catalog\Api\Data\CategoryProductLinkInterface; class CategoryProduct { /** * @var CategoryLinkManagementInterface */ private $categoryLinkManagement; public function __construct( CategoryLinkManagementInterface $categoryLinkManagement ) { $this->categoryLinkManagement = $categoryLinkManagement; } /** * Fetch all Product assigned to Category * * @param id $categoryId * @return CategoryProductLinkInterface[] */ public function getProductByCategory($categoryId) { $assignedProduct = []; try { $assignedProduct = $this->categoryLinkManagement->getAssignedProducts($categoryId); } catch (Exception $exception) { throw new Exception($exception->getMessage()); } return $assignedProduct; } }
Get all the assigned product to a specific category by iterate over a loop from the above method,
$categoryId = "6"; // category id $categoryAttribute = $this->getProductByCategory($categoryId); foreach ($assignedProduct as $product){ echo $product->getSku(). ' ' .$product->getPosition(); }
Output:
Magento\Catalog\Api\Data\CategoryProductLinkInterface[]
The output will be Product SKU, Product Position, category id.