How to retrieve data according to sales channel using sales channel repository.

In this blog, you are going to learn “How to get data by sales channel using sales channel repository”.
I hope you know the directory structure of the Shopware 6 plugin, if you do not know see here – https://docs.shopware.com/en/shopware-platform-dev-en/internals/directory-structure.

The purpose of using a sales channel in the repository is to retrieve data according to the sales channel and this saves the application time even faster as it basically adds a sales channel filter to the repository.

services.xml
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="WebkulTestServiceUserService">
            <argument type="service" id="sales_channel.product.repository"/>
        </service>
    </services>
</container>

Make one services.xml Follow the file, directory structure: – <plugin root>/src/Resources/config/services.xml
Add service, i type attribute put service and in id Add sales_channel after the entity name.
He added product As an institution of sales channel in service.

UserService.php
<?php declare(strict_types=1);

namespace WebkulTestService;

use ShopwareCoreFrameworkDataAbstractionLayerSearchCriteria;
use ShopwareCoreSystemSalesChannelEntitySalesChannelRepositoryInterface;
use ShopwareCoreSystemSalesChannelSalesChannelContext;

class UserService 
{
    /**
     * @var SalesChannelRepositoryInterface
     */
    private $productRepository;

    public function __construct(SalesChannelRepositoryInterface $productRepository)
    {
        $this->productRepository = $productRepository;
    }

    public function load(SalesChannelContext $context)
    {
        $criteria = new Criteria();
        $criteria->addAssociation('cover');
        $criteria->addAssociation('options.group');
        $products = $this->productRepository->search($criteria, $context);
        return $products;
    }
}

Create a service file or add them anywhere you need. Usually we use. EntityRepositoryInterface To fetch, write the data but in this case we are using. SalesChannelRepositoryInterface. SalesChannelRepositoryInterface has only three functions such as search, aggregate, search id.

It takes two parameters, the first is standard and the second is SaleschannelContext while EntityRepositoryInterface has more work and it has two parameters, first is standard and second is context. The only difference is in the two parameters.

SalesChannelRepositoryInterface requires sales channel definition and entity, so create them using SalesChannelDefinitionInterface.
You can see in the main section by walking the product path: – <shopware/platform/src/core/content/product/salesChannel/SalesChannelProductDefinition .

Hope this helps. Thanks for reading. Congratulations
Thanks

Write a Comment

Your email address will not be published. Required fields are marked *