ম্যাজেন্টো 2: স্টোর আইডি দ্বারা পণ্য সংগ্রহ কীভাবে ফিল্টার করা যায়


11

একটি পণ্য কারখানার অবজেক্ট ব্যবহার করে, আমি একটি পণ্য তৈরি করতে, একটি পণ্য সংগ্রহ দখল করতে এবং সেই সংকলনের প্রথম আইটেম আনতে সক্ষম

/* var $productFactory \Magento\Catalog\Model\ProductFactory */
$product = $this->productFactory->create()->getCollection()->getFirstItem();

তবে আমি যদি সংগ্রহের ফিল্টারটিতে একটি store_id যুক্ত করার চেষ্টা করি

    $product = $this->productFactory
        ->create()
        ->getCollection()
        ->addFieldToFilter('store_id', 1)
        ->getFirstItem();

আমি নিম্নলিখিত ত্রুটি পেয়েছি

Invalid attribute name: store_id
#0 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(1434): Magento\Eav\Model\Entity\Collection\AbstractCollection->_addAttributeJoin('store_id', 'inner')
#1 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(359): Magento\Eav\Model\Entity\Collection\AbstractCollection->_getAttributeConditionSql('store_id', 1, 'inner')
#2 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Catalog/Model/Resource/Product/Collection.php(1489): Magento\Eav\Model\Entity\Collection\AbstractCollection->addAttributeToFilter('store_id', 1, 'inner')
#3 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(382): Magento\Catalog\Model\Resource\Product\Collection->addAttributeToFilter('store_id', 1)
...
#63 {main}

যদি আমি স্টোর_আইডি দ্বারা ফিল্টার করতে কোনও পণ্য সংগ্রহস্থল ব্যবহার করার চেষ্টা করি তবে একই জিনিস ঘটে (সংগ্রহস্থলগুলি হুডের নীচে সংগ্রহগুলি ব্যবহার করে)।

এটি কি বাগ? অথবা স্টোর, ওয়েবসাইট এবং পণ্যগুলির মধ্যে সম্পর্ক কি ম্যাজেন্টো 2-তে পরিবর্তিত হয়েছে যে এটি আর বৈধ জিজ্ঞাসা নয়? উভয়? একটিও না? অন্যকিছু?


আমি এম 2-তে খুব নতুন, তবে আপনি কি এই github.com/magento/magento2/blob/develop/app/code/Magento/… ব্যবহার করতে পারবেন না ?
এফএমআরএনজি

@fnng জানতে পদ্ধতিটি ব্যবহার করুন, তবে আমি বলতে চাই "দয়া করে সমস্ত স্টোর এক্স এর অংশ থাকা সমস্ত পণ্যগুলির একটি তালিকা আমাকে পান"। কীভাবে সেটস্টোর আইডি এটি করবে তা নিশ্চিত নয়।
অ্যালান ঝড়

উত্তর:


4

আপনি পদ্ধতিটি দিয়ে এটি করতে পারেন addStoreFilter(), দেখুনMagento\Catalog\Model\ResourceModel\Product\Collection#addStoreFilter()

addStoreFilter()ফাংশন দোকান আইডি বা গ্রহণ করতে পারবেন না Storeএকটি প্যারামিটার হিসাবে অবজেক্ট।

EG, বর্তমান স্টোরের জন্য সমস্ত পণ্য পেতে :

public function getProducts(){
    return $this->collection->addStoreFilter($this->_storeManager->getStore()); 
}

আশা করি, এটি সাহায্য করে।


ধন্যবাদ @ অমিতবেটা! আপনার যদি একটি মুহূর্ত থাকে - আপনি কি জানেন যে পণ্য সংগ্রহস্থল ব্যবহার করে কোনও স্টোর ফিল্টার তৈরি করা সম্ভব? magento.stackexchange.com/questions/91278/…
অ্যালান ঝড়

নিশ্চিত .. আমি দেখব
অমিত বেরা

@ অমিতবেরা, দয়া করে আপনি কীভাবে পণ্য সংগ্রহের ক্ষেত্রে অ্যাডস্টোরফিল্টার () ব্যবহার করবেন তা একটু ব্যাখ্যা করতে পারেন।

5

আপাতত এটি একটি বাগের মতো দেখায়, কারণ ProductRepository::getList()পদ্ধতিটির সাথে স্টোর ফিল্টার প্রয়োগ করার কোনও সম্ভাবনা নেই , অনুসন্ধান আইডিয়ার ফিল্টার হিসাবে স্টোর আইডি পাস করা ।

GetList বাস্তবায়ন, আপনি যে থেকে সমস্ত ফিল্টার জানতে পারেন SearchCriteria সংগ্রহ প্রয়োগ

    foreach ($searchCriteria->getFilterGroups() as $group) {
        $this->addFilterGroupToCollection($group, $collection);
    }

ইন Magento\Catalog\Model\ProductRepository::addFilterGroupToCollectionজন্য বিশেষ হ্যান্ডলিং আছে শ্রেণী ফিল্টার , কিন্তু দোকানের জন্য কেউ নেই।

সুতরাং, অতিরিক্ত শর্তটি যুক্ত করা উচিত Magento\Catalog\Model\ProductRepository::addFilterGroupToCollectionযা আমাদের স্টোর ফিল্টার রয়েছে কিনা তা পরীক্ষা করে এবং যদি আমাদের থাকে - সংগ্রহের জন্য স্টোর আইডি সেট করুন, যেমন:

        if ($filter->getField() == \Magento\Catalog\Model\Product::STORE_ID) {
            $collection->setStore($filter->getValue());
            continue;
        }

এই ইস্যুটির জন্য অভ্যন্তরীণ বাগ তৈরি করা হয়েছে, এটির নম্বরটি MAGETWO-45950


কোন খবর? আমি গিতুবে টিকিটের নম্বরের রেফারেন্স পাই না।
ফ্যাবিয়ান শেমংলার

1
ম্যাজেন্টোতে 2 পণ্য ওয়েবসাইটগুলিতে বরাদ্দ করা হয়, স্টোরগুলিতে নয়। সুতরাং, অ্যালান দ্বারা বর্ণিত প্রাথমিক আচরণটি সঠিক, কারণ পণ্য সত্তার স্টোর আইডি লিঙ্ক নেই, কেবল ওয়েবসাইট আইডির লিঙ্ক। এবং অভ্যন্তরীণ টিকিটটি প্রোডাক্ট ওয়েবসাইডলিংক ইন্টারফেসের সাথে প্রোডাক্ট ইন্টারফেসে এক্সটেনশন অ্যাট্রিবিউট প্রবর্তনের বিষয়ে রয়েছে
ইগোর মিনায়ায়লো

স্টোর / ওয়েবসাইট অ্যাসোসিয়েশন ছাড়াও setStore()কোন স্টোরের নির্দিষ্ট অ্যাট্রিবিউট মানগুলি পাওয়া যায় তাও নির্দিষ্ট করে না ? নাকি এটি এখন অন্যরকমভাবে করা হয়েছে?
ফ্যাবিয়ান শেমংলার

প্রোডাক্ট মডেল বাস্তবায়নে সেটস্টোরআইডি / গেটস্টোরআইডি পদ্ধতি রয়েছে তবে প্রোডাক্ট ইনটারফেসে কোনও নেই, তাই আপনার ব্যবসার যুক্তিতে তাদের উপর নির্ভর করার পরামর্শ দেওয়া হয় না।
ইগোর মিনায়ায়লো

এখনই স্টোরভিউ স্তরের মানগুলির সমাধানের জন্য (উদাহরণস্বরূপ, গুণাবলীর স্থানীয়করণ) স্টোরআইডি ইউআরএল অংশটি তৈরি করেছে REST এপিআইগুলিতে
ইগোর মিনায়ায়লো

0

আপনি যদি বেশ কয়েকটি টেবিলের সাথে কাস্টম মডেল ব্যবহার করেন তবে এতে টেবিলের নাম যুক্ত করুন: addFieldToFilter('**table_name.**column_name', 1)


আপনি কি দয়া করে আমার কলাম থেকে পণ্য সংগ্রহটি লোড করার জন্য পুরো স্নিপেটটি ভাগ করে বলতে পারেন সত্তা আইডি, যেমনটি আপনি উপরে বলেছেন
সুশীবাম

0

1) শ্রেণিটি হ'ল \Magento\Catalog\Model\ResourceModel\Category\Collection:

/** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $collection */
$collection = $this->categoryFactory->create()->getCollection()
        ->addFieldToSelect('*');

2) তারপরে পদ্ধতিটি হ'ল $collection->setStoreId(0);


পিএস 0 এর পরিবর্তে আপনি আপনার স্টোর আইডি 1, 2, ...
লাগিয়ে দিতে পারেন

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