সংগ্রহ মডেল এবং রিসোর্স মডেল সম্পর্কে


29

রিসোর্স মডেল এবং সংগ্রহ মডেল ব্যবহার সম্পর্কে আমি কিছুটা বিভ্রান্ত। কখনও কখনও যখন আমি নির্দিষ্ট বৈশিষ্ট্য ব্যবহার করে পণ্য লোডের জন্য উদাহরণগুলি দেখি, কিছু উদাহরণে তারা সংগ্রহের মডেল ব্যবহার করে এবং কখনও কখনও তারা সংস্থান মডেল ব্যবহার করে।

এছাড়াও আমি কখন নির্দিষ্ট পদ্ধতি get...এবং set...টেবিল সারি নামের সাথে ব্যবহার করতে পারি ? ভালো লেগেছে getName, getId। আমি চেষ্টা করার চেষ্টা করেছি কিন্তু মানগুলি পেতে অক্ষম এবং এটি ত্রুটি দেখায়: "অবজেক্টে অবধারিত পদ্ধতি কল করা"

$product = Mage::getModel('catalog/product')
    ->loadByAttribute('name', 'product_name');

echo $product->getName(); 
echo $product->getSku();

এটি "অপরিবর্তিত পদ্ধতি getSku()" দেখায়

যদি আমি ব্যবহার করি var_dump($product), এসকিউ বস্তুতে দেখায়, তবে এসকিউ ব্যবহার করতে অক্ষম getSku()...


পরিষ্কার হতে - $productআপনার উদাহরণে একটি উদাহরণ Mage_Catalog_Model_Product, যা ম্যাজেন্টো পার্লেন্সে একটি "মডেল"।
বেনমার্কস

হ্যাঁ ঠিক. তবে সংগ্রহের মডেল এবং সংস্থানসমূহের মডেল এবং কী কী পদ্ধতি ব্যবহারের জন্য উপলভ্য তা কখনই ব্যবহার করব তা নিয়ে আমি বিভ্রান্ত am আমি দেখতে পাই যে মডেলগুলিতে সংগ্রহের মডেলগুলি পাওয়া যায় >> মডিউলটির সংগ্রহ ফোল্ডার এবং সংস্থানসমূহ ফোল্ডারগুলি সংস্থানসমূহের মডেলগুলিতে পাওয়া যায় তবে কখন এবং কোন মডেলটি ব্যবহার করা দরকার তাই আমি এ সম্পর্কে কিছুটা বিভ্রান্ত হই
MagentoBoy

আমি জানি, আমাদের উপলভ্য পদ্ধতিগুলি ব্যবহার করতে হবে যা সংগ্রহ এবং আউটসোর্সগুলিতেও উপলব্ধ। তবে সঠিক মডেলটি ব্যবহার করতে আমার অসুবিধা হচ্ছে। এবং আমি এও করতে পারি না যে "গেট" পদ্ধতিগুলি ব্যবহার করে ফলাফল সেটটি থেকে ফলাফল পেতে সক্ষম হচ্ছি মানে ডাটাবেস টেবিল সারি নাম ব্যবহার করে getName ()। এটি অবজেক্টে অপরিজ্ঞাত পদ্ধতিটি দেখায় এর অর্থ যে আমি ভুল মডেল বা পদ্ধতিটি ব্যবহার করছি যা আমার ব্যবহার করা দরকার তাই আমি যেটি ব্যবহার করতে হবে তা সম্পর্কে আমি চুক্তি করছি না am
MagentoBoy

1
এই প্রশ্নটি জিজ্ঞাসা করার জন্য ধন্যবাদ .. আমি দীর্ঘদিন এই প্রশ্নের উত্তর
খুঁজছিলাম

উত্তর:


63

ম্যাজেন্টোর সিআরইউডি মডেলের তিনটি বুনিয়াদি শ্রেণির ধরণ রয়েছে।

একটি "মডেল" হ'ল যা আপনি সাধারণত ব্যবহার করেন। এটি একটি ডাটাবেস অগ্নিস্টিক উপায়ে (পণ্য, বিভাগ, সিএমএস পৃষ্ঠা, পর্যালোচনা, ইত্যাদি) কোনও নির্দিষ্ট ধরণের ডেটার প্রতিনিধিত্ব করে

একটি "রিসোর্স মডেল" হ'ল এমন একটি শ্রেণি যা পর্দার আড়ালে ম্যাজেন্টো থেকে ডেটা প্রকৃতভাবে নিয়ে আসে। প্রতিটি মডেলের একটি সংস্থান মডেল থাকে যা ডাটাবেস থেকে কোনও মডেলের একক উদাহরণ লোড করতে ব্যবহৃত হয় ।

একটি "সংগ্রহ" একটি শ্রেণি যা নিয়মের একটি সেটের ভিত্তিতে একাধিক মডেলের কাঠামোর মতো অ্যারে লোড করে। এটিকে এসকিউএল এর মতো ভাবেন WHERE clause

কিছুটা বিভ্রান্তিকর বিষয়গুলি হ'ল, পর্দার আড়ালে, ম্যাজেন্টো একটি সংগ্রহকে একটি সংস্থান হিসাবে বিবেচনা করে। সুতরাং সংগ্রহ সংস্থান মডেল এবং স্বতন্ত্র সংস্থান মডেল আছে

সাধারণভাবে বলতে গেলে, আপনি যখন কোনও নির্দিষ্ট আইটেমটি লোড করতে চান, আপনি একটি মডেল ব্যবহার করেন । আপনি যখন বেশ কয়েকটি আইটেম লোড করতে চান তখন আপনি সংগ্রহ সংস্থান মডেল ব্যবহার করেন ।

//loads one
$product = Mage::getModel('catalog/product')->load($id);

//loads many products where price is greater than 100
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*') //load all fields, see EAV below
->addAttributeToFilter('price', array('gt'=>'100'));

foreach($products as $product)
{
    var_dump($product->getSku());
}

সংগ্রহ সংস্থান মডেলটির মাধ্যমে লোড করার বিষয়ে একটি বিষয় মনে রাখবেন প্রতিটি স্বতন্ত্র মডেলের afterLoad পদ্ধতিটি স্বয়ংক্রিয়ভাবে কল করা হবে না, যার অর্থ কিছু ডেটা লোড নাও হতে পারে।

Individua রিসোর্স মডেল শ্রেণীর সাধারণত সরাসরি অ্যাক্সেস নেই। তবে, মাঝে মাঝে একটি নির্দিষ্ট মডেল একটি থাকবে রিসোর্স এটি একটি দরকারী পদ্ধতি সঙ্গে মডেল। এগুলি আপনি সিস্টেম ব্যবহার করে সময়ের সাথে সাথে আবিষ্কার করতে পারবেন।

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

$page = Mage::getModel('cms/page')->load('Home page','title');
var_dump($page->getData());

তবে কয়েকটি ম্যাজেন্টো মডেল হ'ল ইএভি মডেল। এটি "সত্তা বৈশিষ্ট্য মান" এর জন্য দাঁড়িয়েছে এবং এই মডেলগুলির ক্ষেত্রগুলির একটি নির্দিষ্ট সেট নেই বলার অভিনব উপায়। এর মধ্যে রয়েছে পণ্য মডেল এবং বিভাগের মডেল। এই বৈশিষ্ট্যটি হ'ল যা আপনাকে বিভিন্ন ধরণের পণ্যের জন্য আলাদা আলাদা বৈশিষ্ট্য বাছাই করতে দেয়। EAV মডেলের প্রতিটি ক্ষেত্র একটি গুণ হিসাবে পরিচিত। উপরের সিনট্যাক্সগুলি এই মডেলগুলির সাথে কাজ করবে না, পরিবর্তে আপনাকে loadByAttributeপদ্ধতিটি ব্যবহার করতে হবে ।

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'n2610');

আপনার নির্দিষ্ট সমস্যা সম্পর্কিত, যদি আপনি নির্দিষ্ট পদ্ধতির "পদ্ধতি অপরিজ্ঞাত" কোনও ত্রুটি পেয়ে থাকেন তবে আপনার সিস্টেমে কিছু খুব ভুল। এমনকি যদি getSkuপদ্ধতি বিদ্যমান নয়, Magento যাদু সেটার এবং সংগ্রহকারী পদ্ধতি যা নিশ্চিত হয়েছে getকোনো কল মডেল সবসময় কিছু ফিরে আসবে, এমনকি যদি এটা নাল।

এর চেয়ে বেশি সম্ভবত আপনি নীচের মতো একটি ত্রুটি পেয়ে যাচ্ছেন

Call to a member function getSku() on a non-object

এই ত্রুটিটি ঘটছে কারণ এটি যদি বস্তুটি লোড করতে না পারে তবে loadByAttributeপদ্ধতিটি ফিরে আসে false

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'this-is-not-a-sku');
var_dump($product); //prints false

আপনার কোডে এই জাতীয় কিছু চেষ্টা করুন।

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'sku-value');
if($product)
{
    var_dump($product->getName());
    var_dump($product->getSku());
    var_dump($product->getData());
}
else
{
    var_dump("Could not load product");
}

শর্তাধীন অতিরিক্ত ছাড়াও, getData()পদ্ধতিটি লক্ষ্য করুন । এটি অ্যারের হিসাবে সমস্ত অবজেক্টের ডেটার একটি অ্যারে প্রদান করবে।

আশা করি আপনার চলমান করার জন্য এটি যথেষ্ট। শুভকামনা!


@ অ্যালান .. খুব সুন্দর বর্ণনা ... আমি আপনার বেশিরভাগ পোস্ট ম্যাগেন্টোতে পড়েছি :) .. আমার পোস্টে আপনার উত্তর দেখে আমি খুব খুশি হয়েছি। আমি আপনার তথ্য নিয়ে এগিয়ে যাব। আমি যদি তখন কোন সমস্যা পাই তবে আমি আশা করি আমি এই সম্প্রদায়ের কাছ থেকে ভাল সমর্থন পাব। আমি যেমন ম্যাজেন্টো তে পাশাপাশি পোগ্রামিংয়ে নতুন তাই আমার সারিটি এতটা ধারণামূলক না হলেও তবুও আমি শিখতে চাই। আমি সত্যিই অনেকটা ম্যাজেন্টো ফ্রেমওয়ার্ক পছন্দ করি :) .. ধন্যবাদ স্যার :)
ম্যাজেন্টোবয়

আমি দুঃখিত, আমার আরও একটি প্রশ্ন আছে। যদি আমি $ product = Mage :: getModel ('ক্যাটালগ / পণ্য') কল করি; এবং তারপরে যদি আমি getName () এবং getSku () কল করি। আমি যদি ফোরচ্লুপে $ পণ্যটির পুনরাবৃত্তি করি তবে আমি মানগুলি পেতে সক্ষম হচ্ছি ?? বা আমাকে লোডবাইএট্রিবিউট () পদ্ধতিতে কল করতে হবে ??
ম্যাজেন্টোবয়

@ ম্যাজেন্টোবয় আমার ক্ষমা চাইছেন তবে ভাষা বাধা আপনার প্রশ্নের মুখোশ করছে appears আমি নিশ্চিত না আপনি কী জিজ্ঞাসা করছেন।
অ্যালান ঝড়

স্যার, আমি দুঃখিত। উত্তেজনায় আমি আমার প্রশ্নটি পরিষ্কারভাবে প্রকাশ করি নি। তবে আমি চেষ্টা করেছি এবং এখন আমি পণ্যগুলির তালিকা পেতে সক্ষম হয়েছি এবং এখন হিসাবে সঠিকভাবে বিভিন্ন বৈশিষ্ট্য ব্যবহার করে পণ্যগুলি আনতে সক্ষম। :) এবং হ্যাঁ আমার প্রশ্ন ছিল, আমি কী getName (), getPrice (), getSku (), অ্যাডট্রিবিউটটোসিলিট ('*'), অ্যাডআট্রিবিউটটোফিল্টার () বা লোডবাইএট্রিবিউট () না কল করে ব্যবহার করতে পারি; প্রাক্তন জন্য $ product = Mage :: getModel ('ক্যাটালগ / পণ্য'); foreach ($ পি হিসাবে পণ্য) cho প্রতিধ্বনি $ p-> getName ()। ""। $ p-> getSku ();} ... গেট মডেল হিসাবে পণ্য শ্রেণি ইনস্ট্যান্ট হবে তারপর আমরা অ্যাক্সেস পেতে এবং সেট পদ্ধতি অ্যাক্সেস করতে পারি ।
ম্যাজেন্টোবয়

1
@ user8009 এই ত্রুটি বার্তাটি অগণিত কারণে ঘটতে পারে। যদি আপনি এফটিপি অ্যাক্সেস পেতে না পারেন বা সিস্টেমের স্থানীয় / বিকাশ সংস্করণে সমস্যাটি পুনরুত্পাদন করতে পারেন তবে আপনি কখনই সমস্যার সমাধান করবেন না।
অ্যালান ঝড়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.