আমি জানি যে বর্তমানে Magento 2 (2.1.2) এ প্রচুর কোডটি কমবেশি Magento 1 থেকে পোর্ট করা আছে এবং ভবিষ্যতে অনেকগুলি কোড একটি সমমানের দ্বারা প্রতিস্থাপিত হবে। এই দিকটিতে, আমি ভাবছি যে ম্যাজেন্টো 2-তে সংগ্রহের ভবিষ্যত কী।
আমাকে বিস্তারিত বলতে দাও:
ম্যাজেন্টো 1:
ম্যাজেন্টো 1 এ আমরা এর মতো সংগ্রহ পেতে ব্যবহৃত হয়:
$products = Mage::getModel('catalog/product')->getCollection();
তারপরে আমরা সংগ্রহে ফিল্টার এবং অন্যান্য ক্রিয়াকলাপ প্রয়োগ করতে পারি:
$products->addAttributeToFilter('price', ['gteq' => 10]);
$products->addFieldToFilter('created_at', ['lt' => '2016-10-10']);
$products->setPageSize(10);
// ... etc ...
এবং সর্বশেষে তবে সর্বনিম্ন নয়, আমাদের সংগ্রহটি মডেলগুলি ফিরিয়ে আনবে:
foreach ($products as $product) {
echo get_class($product); // Mage_Catalog_Model_Product
}
ম্যাজেন্টো 2:
Magento বিমূর্তকরণের অনেকগুলি নতুন স্তর যুক্ত করে, আরও বেশি কাজ করার সহজ পদ্ধতি প্রয়োগ করে implementing এর অর্থ হ'ল আমরা যখন সত্তার একটি তালিকা চাই, আমরা এটি একটি সংগ্রহশালা থেকে জিজ্ঞাসা করি:
$productResults = $this->productRepository->getList($searchCriteria);
আমরা ফিল্টার প্রয়োগ করতে চান, আমরা সংমিশ্রণ ব্যবহার SearchCriteriaBuilder
, FilterGroupBuilder
, FilterBuilder
এবং SortOrderBuilder
:
$this->searchCriteriaBuilder->addSortOrder(
$this->sortOrderBuilder
->setField('created_at')
->setAscendingDirection()
->create()
);
$priceFilter = $this->filterBuilder
->setField('price')
->setValue(10)
->setConditionType('gteq')
->create();
$createdAtFilter = $this->filterBuilder
->setField('created_at')
->setValue('2016-10-10')
->setConditionType('lt')
->create();
$filterGroups = [
$this->filterGroupBuilder->addFilter($priceFilter)->create(),
$this->filterGroupBuilder->addFilter($createdAtFilter)->create()
];
এবং যদি আমরা আমাদের ফলাফলগুলি নিয়ে পুনরাবৃত্তি করতে চাই তবে আমরা ডেটা মডেলগুলি পাই, প্রকৃত (উত্তরাধিকারসূত্রে) মডেলগুলি না:
foreach ($productResults->getItems() as $product) {
echo get_class($product); // \Magento\Catalog\Model\Data\Product
}
এই ধরনের বিমূর্ততা সলিড নীতি অনুসরণ করে এবং 'উত্তরাধিকারের উপরের রচনা' -নীতিটিকে আলিঙ্গন করে। সংগ্রহের উপর অন্যথায় সম্পন্ন হওয়া কোনও 'বহিরাগত' অপারেশন (উদাহরণস্বরূপ মিলিত হওয়ার মতো) সংগ্রহস্থলের অভ্যন্তরীণভাবে সম্পন্ন হয়, যা মডিউলের বাইরে ব্যবহার করাও সহজ করে তোলে।
প্রশ্নটি:
এই সবগুলি আমাকে বিস্মিত করে: পুরো সংগ্রহস্থল / ডেটা মডেল-পদ্ধতির সাথে, সংগ্রহের জন্য ম্যাজেন্টো 2 এর ভবিষ্যতে কোনও স্থান আছে? সংগ্রহগুলি কেবলমাত্র মডিউল দ্বারা অভ্যন্তরীণভাবে ব্যবহার করা হবে এবং এর বাইরে নয়? বা সত্তা ম্যানেজারের পক্ষে অবহেলা করা যাচ্ছে?
বর্তমানে, আপনি যদি ডেটা মডেলগুলিকে আলিঙ্গন করতে চান, তবে এখনও \Magento\Framework\Model\AbstractModel
সংগ্রহটি কাজ করার জন্য আপনাকে উত্তরাধিকারসূত্রে প্রাপ্ত মডেল (উত্তরাধিকার সূত্রে প্রাপ্ত ) তৈরি করতে হবে (যেহেতু Magento\Framework\Data\Collection::setItemObjectClass
মডেলটি থেকে প্রসারিত হওয়া প্রয়োজন Magento\Framework\DataObject
)। এবং আপনার সংগ্রহস্থলে ফিল্টার করতে সক্ষম হতে আপনার সংগ্রহ প্রয়োজন need কিন্তু তারপরে আবারও, সংগ্রহশালায় আপনাকে আপনার (নিয়মিত) মডেলটিকে একটি ডেটা মডেলে রূপান্তর করতে হবে।
বা আমাদের কি এটি অর্ডার সংগ্রহের মতো প্রয়োগ করতে হবে, যেখানে এর getList()
উদাহরণটি ফিরে আসে Magento\Sales\Api\Data\OrderSearchResultInterface
, কিন্তু পানির নিচে অনুসন্ধানের ফলাফলগুলি এই ইন্টারফেসটি প্রয়োগ করে এমন একটি নিয়মিত সংগ্রহ ছাড়া আর কিছুই নয়। মজাদার তথ্য: অনুসন্ধানের ফলাফলগুলি জানিয়েছে যে এটি ডেটা মডেলগুলির একটি অ্যারে ফিরিয়ে দেবে ( Magento\Sales\Api\Data\OrderInterface[]
), তবে আপনি কোডটি বিশ্লেষণ করলে getItems()
কার্যকর হবে Magento\Framework\Data\Collection::getItems()
যা বিনিময়ে ডেটা মডেলগুলি নয়, অর্ডার মডেলগুলি (সেট হিসাবে সেট করা Magento\Sales\Model\ResourceModel\Order\Collection::_construct()
) দেয়। 'উত্তরাধিকারের ওপরে রচনা' এর জন্য অনেক কিছু।
ম্যাজেন্টো ২-তে সঠিক উপায়টি নিয়ে অনেক প্রশ্ন আবারও একই জিনিসটি করার 100 টি পদ্ধতি রয়েছে তবে 'দ্য ম্যাজেন্টো ওয়ে' কী? বা আমি কি এখানে পুরোপুরি ভুল ট্র্যাকের উপরে আছি?