একটি ম্যাজেন্টো 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.