Smile\ElasticsuiteCatalog\Model\ResourceModel\Product\Indexer\Fulltext\Datasource\CategoryData::loadCategoryData PHP Method

loadCategoryData() public method

Load categories data for a list of product ids and a given store.
public loadCategoryData ( integer $storeId, array $productIds ) : array
$storeId integer Store id.
$productIds array Product ids list.
return array
    public function loadCategoryData($storeId, $productIds)
    {
        $select = $this->getCategoryProductSelect($productIds, $storeId);
        $categoryData = $this->getConnection()->fetchAll($select);
        $categoryIds = [];
        foreach ($categoryData as $categoryDataRow) {
            $categoryIds[] = $categoryDataRow['category_id'];
        }
        $storeCategoryName = $this->loadCategoryNames(array_unique($categoryIds), $storeId);
        foreach ($categoryData as &$categoryDataRow) {
            $categoryDataRow['name'] = $storeCategoryName[(int) $categoryDataRow['category_id']];
        }
        return $categoryData;
    }

Usage Example

Example #1
0
 /**
  * Add categories data to the index data.
  *
  * {@inheritdoc}
  */
 public function addData($storeId, array $indexData)
 {
     $categoryData = $this->resourceModel->loadCategoryData($storeId, array_keys($indexData));
     foreach ($categoryData as $categoryDataRow) {
         $productId = (int) $categoryDataRow['product_id'];
         unset($categoryDataRow['product_id']);
         $categoryDataRow = array_merge($categoryDataRow, ['category_id' => (int) $categoryDataRow['category_id'], 'is_parent' => (bool) $categoryDataRow['is_parent'], 'name' => (string) $categoryDataRow['name']]);
         if (isset($categoryDataRow['position']) && $categoryDataRow['position'] !== null) {
             $categoryDataRow['position'] = (int) $categoryDataRow['position'];
         }
         $indexData[$productId]['category'][] = array_filter($categoryDataRow);
     }
     return $indexData;
 }