1

In Magento 2.4.1 I have a custom multiple select attribute 'theme' The theme attribute contains options 'football' and 'sport' Some products have both attribute options applied. I can apply both attribute values to a product fine but when I filter in product grid dashboard, it does not find products which have more than one attribute value applied. If a product has one attribute value only then it filters correctly but if a product has multiple attribute filters applied it does not show. Is this a default Magento 2 setting? Thank you.

asked Nov 13, 2020 at 17:35

1 Answer 1

0

I did take a look at this question. A multiselect attribute gets stored in a table with varchar suffix. For instance, product attribute activity (present in Magento sample data) is stored in catalog_product_entity_varchar. Also, the value is a list of options ids.

see attachedenter image description here screenshot.

Therefore, your query has to use a like filter, see below an example.

<?php
namespace Mbs\MultiSelectFilter\Command;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Framework\Api\FilterBuilder;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class GetProductWithSeveralMultiselectOptions extends Command
{
 /**
 * @var ProductRepositoryInterface
 */
 private $productRepository;
 /**
 * @var SearchCriteriaBuilder
 */
 private $searchCriteriaBuilder;
 /**
 * @var FilterBuilder
 */
 private $filterBuilder;
 /**
 * GetProductWithSeveralMultiselectOptions constructor.
 * @param ProductRepositoryInterface $productRepository
 * @param SearchCriteriaBuilder $searchCriteriaBuilder
 * @param FilterBuilder $filterBuilder
 * @param string|null $name
 */
 public function __construct(
 ProductRepositoryInterface $productRepository,
 SearchCriteriaBuilder $searchCriteriaBuilder,
 FilterBuilder $filterBuilder,
 string $name = null
 ) {
 parent::__construct($name);
 $this->productRepository = $productRepository;
 $this->searchCriteriaBuilder = $searchCriteriaBuilder;
 $this->filterBuilder = $filterBuilder;
 }
 protected function configure()
 {
 $this->setName('mbs:find:product');
 $this->setDescription('Find Product in catalog focusing with multiselect attribute');
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
 $filter = $this->filterBuilder->setField('activity')
 ->setConditionType('like')
 ->setValue('%5432%')
 ->create();
 $searchCriteria = $this->searchCriteriaBuilder->addFilters([$filter])->create();
 $result = $this->productRepository->getList($searchCriteria);
 foreach ($result->getItems() as $product) {
 $output->writeln(sprintf('sku: %s', $product->getSku()));
 }
 $output->writeln('CFart log import complete');
 }
}
answered Nov 14, 2020 at 13:55
2
  • Thank you for the response. I'm fairly new to Magento, how would I use this and where? Commented Nov 14, 2020 at 18:40
  • This is a command-line script showing you how to build a query with a multiselect attribute. I read that is what you needed. Good luck with Magento Commented Nov 14, 2020 at 20:55

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.