একটি ম্যাজেন্টো 2 অবজেক্ট সংগ্রহস্থল ফিল্টারিং


24

ম্যাজেন্টো 2 এ, আপনি পণ্যের বৈশিষ্ট্যগুলি দ্বারা ফিল্টার করতে কোনও পণ্য সংগ্রহস্থল ব্যবহার করতে পারেন?

ম্যাজেন্টো 2 এ, আপনি অনুসন্ধানের মানদণ্ড অবজেক্টটি ব্যবহার করতে পারেন

\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria,

এবং একটি ভান্ডার

\Magento\Catalog\Api\ProductRepositoryInterface $productRepository,

অবজেক্টের একটি তালিকা আনতে

$searchCriteria->getPageSize(10);
$list = $productRepository->getList($searchCriteria);

যাইহোক, অনুসন্ধান ক্রিটরিয়া অবজেক্টের (মনে হচ্ছে?) সরাসরি ফিল্টারিং ক্ষমতা নেই। সন্ধানের বিচার্য বিষয় বর্গ করে কিছু বলা filterGroups যোগ করার জন্য পদ্ধতি আছে

#File: lib/internal/Magento/Framework/Api/SearchCriteria.php        

public function getFilterGroups()
{
    $filterGroups = $this->_get(self::FILTER_GROUPS);
    return is_array($filterGroups) ? $filterGroups : [];
}

public function setFilterGroups(array $filterGroups = null)
{
    return $this->setData(self::FILTER_GROUPS, $filterGroups);
}    

তবে এটি পরিষ্কার নয়, ঠিক কীভাবে, ফিল্টার গ্রুপটি পিএইচপি-র টাইপযুক্ত অ্যারে ধন্যবাদ জানায়।

আমি কীভাবে কোনও ম্যাজেন্টো 2 সংগ্রহস্থল ব্যবহার করতে পারি তার মতো জিনিসগুলি করতে

  • [এই নির্দিষ্ট এসকিউ] দিয়ে আমাকে সমস্ত পণ্য দেখান
  • [এই তারিখ] এর পরে তৈরি সমস্ত পণ্য আমাকে দেখান
  • প্রভৃতি

2
দেখে মনে হচ্ছে গ্রুপগুলি ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ এপি \ অনুসন্ধান \ ফিল্টারগ্রুপের একটি অ্যারে, যার পরিবর্তে \ ম্যাজেন্টো me ফ্রেমওয়ার্ক \ এপি \ ফিল্টার ফিল্টার রয়েছে, ফিল্টারগুলি \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ এপি \ ফিল্টারবিল্ডার এবং শর্ত_প্রকারের মধ্যে রয়েছে 'এক', 'নেক', 'জিটি' ইত্যাদির রূপ তবে সমর্থিত শর্তের ধরণের তালিকা খুঁজে পাওয়া যায়নি:
Pet

2
প্রকৃতপক্ষে, তালিকার মতো কিছু কিছু পাওয়া যাবে ম্যাজেন্টো / ফ্রেমওয়ার্ক / এপি /
ক্রেটারিয়ায় ইন্টারফেস

উত্তর:


30

নিম্নলিখিত নমুনা ক্লাস পরীক্ষা করে দেখুন। এসকিউ দ্বারা ফিল্টার করতে, এটি চেষ্টা করুন:

$productFilterDemo->getProducts('sku', 'product_sku_value', 'eq');

নির্দিষ্ট তারিখের পরে তৈরি পণ্যগুলি পেতে, এটি:

$productFilterDemo->getProducts('created_at', 'creation date', 'gt');

নমুনা শ্রেণি:

<?php
namespace Vendor\ModlueName\Model;

use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Catalog\Api\ProductRepositoryInterface;

class ProductFilterDemo
{
    /** @var ProductRepositoryInterface */
    protected $productRepository;

    /** @var SearchCriteriaBuilder */
    protected $searchCriteriaBuilder;

    /**
     * Initialize dependencies.
     *
     * @param ProductRepositoryInterface $productRepository
     * @param SearchCriteriaBuilder $searchCriteriaBuilder
     */
    public function __construct(
        ProductRepositoryInterface $productRepository,
        SearchCriteriaBuilder $searchCriteriaBuilder
    ) {
        $this->productRepository = $productRepository;
        $this->searchCriteriaBuilder = $searchCriteriaBuilder;
    }

    /**
     * Get products with filter.
     * 
     * @param string $fieldName
     * @param string $fieldValue
     * @param string $filterType
     * @return \Magento\Catalog\Api\Data\ProductInterface[]
     */
    public function getProducts($fieldName, $fieldValue, $filterType)
    {
        $searchCriteria = $this->searchCriteriaBuilder->addFilter($fieldName, $fieldValue, $filterType)->create();
        $products = $this->productRepository->getList($searchCriteria);
        return $products->getItems();
    }
}

4
ধন্যবাদ, আমি কি পরে ছিল! দেখে মনে হচ্ছে একাধিক ফিল্টার যুক্ত করা "OR" শর্ত তৈরি করে - "AND" শর্ত তৈরি করার কোনও উপায় আছে কি?
অ্যালান ঝড়

3
- যদি আপনার একটি মুহূর্ত থাকে আমি কি ফিল্টার গ্রুপ সঠিকভাবে ব্যবহার করছি? তারা মনে হয় একটি ওআর হিসাবে প্রয়োগ করছে, একটি ওআরএন্ড ম্যাগনটো.স্ট্যাকেক্সেঞ্জার.কমেসেশনস
অ্যালান স্টর্ম

4
ফিল্টারগুলি একটি ফিল্টার গ্রুপের মধ্যে "OR" এর সাথে একত্রিত হয় এবং প্রতিটি গোষ্ঠী অনুসন্ধান মানদণ্ডের স্তরে "এবং" এর সাথে মিলিত হয়। এক নজরে দেখুন: age ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ এপি \ সার্চক্রিটরিয়া বিল্ডার :: সেট ফিল্টারগ্রুপস ($ গোষ্ঠী []) এবং \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ এপি \ অনুসন্ধান \ ফিল্টারগ্রুপবিল্ডার :: সেটফিলার্স ($ ফিল্টারস [])
অ্যালেক্স পালিয়ারুশ

আমি ম্যাজেন্টো ২.৩ ব্যবহার করছি, অনুসন্ধানের মাপদণ্ডের নির্মাতা কোনও আইটেম "আউট_ফ_স্টক" থাকলে আইটেমটি ফিল্টার করে না?
অক্টোপাস

14
public function __construct(
    ProductRepositoryInterface $productRepository,
    SearchCriteriaBuilder $searchCriteriaBuilder,
    FilterBuilder $filterBuilder,
) {
    $this->productRepository = $productRepository;
    $this->searchCriteriaBuilder = $searchCriteriaBuilder;
    $this->filterBuilder = $filterBuilder;
}

public function getProducts()
{
    $filters[] = $this->filterBuilder
        ->setField('sku')
        ->setConditionType('eq')
        ->setValue('something')
        ->create();
    $this->searchCriteriaBuilder->addFilters($filters);

    $searchCriteria = $this->searchCriteriaBuilder->create();
    $searchResults = $this->productRepository->getList($searchCriteria);
    return $searchResults->getItems();
}

1
দেখে মনে হচ্ছে আপনার উদাহরণটিতে \Magento\Framework\Api\Search\SearchCriteriaBuilderব্যবহার করা হয়েছে (সন্ধান নির্দিষ্ট একটি), যখন আমি ব্যবহার করেছি \Magento\Framework\Api\SearchCriteriaBuilder(সমস্ত পরিষেবার জন্য জেনেরিক), আমার উত্তর দেখুন। এছাড়াও এটি ফিল্টার যুক্ত করার সহজ উপায় সরবরাহ করে, addFilter()স্বাক্ষরগুলি পৃথক।
অ্যালেক্স পালিয়ারুশ

সম্মত, এটি কিছুটা আলাদা সমাধান।
এলডুসান

অ্যাড ফিল্টারটি কি কেবল 1 টি প্যারাম ব্যবহার করতে পারে?
অ্যান্টোনিও পেডিকিনি 21

@ এলডুসান, আপনি কি দয়া করে আমাকে বলতে পারেন যে আমি কীভাবে অবজেক্টম্যানেজারে "$ সন্ধান ক্রিটরিয়া বিল্ডার" ব্যবহার করতে পারি?
সরফরাজ সিপাই

2
আমি মনে করি যে এটি আপনার ক্লাসের কনস্ট্রাক্টর এ যুক্ত করা উচিত, আপনি কেন এটির জন্য অবজেক্ট ম্যানেজারটি ব্যবহার করতে চান?
এলডুসান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.