সংগ্রহ থেকে সমস্ত আইডি পাওয়ার সবচেয়ে কার্যকর উপায়


37

প্রোডাক্ট সংগ্রহের সমস্ত আইডি পেতে অতীতে, আমি সবসময় getAllIdsসংগ্রহে ব্যবহার করেছি , বিশ্বাস করে এটি এমন একটি পদ্ধতি যা ডেটা সহ পুরো সংগ্রহের লোডকে আটকায় was

তবে, আমি আসলে আজ পদ্ধতির দিকে নজর রেখেছি এবং এটি সংগ্রহটি লোড করে আইডি অ্যারে পেতে প্রতিটি আইটেমের উপরে পুনরাবৃত্তি করে।

public function getAllIds()
{
    $ids = array();
    foreach ($this->getItems() as $item) {
        $ids[] = $this->_getItemId($item);
    }
    return $ids;
}

আমার প্রশ্নটি হল, কোনও সংগ্রহ থেকে কেবল আইডি ক্ষেত্রটি পুনরুদ্ধার করার সবচেয়ে কার্যকর পদ্ধতিটি কী?

উত্তর:


43

আসলে getAllIdsএটি করার সেরা উপায়। উদাহরণস্বরূপ, পণ্য সংগ্রহের সংস্থান মডেলটিতে পদ্ধতিটি দেখতে এইরকম:

public function getAllIds($limit = null, $offset = null)
{
    $idsSelect = $this->_getClearSelect();
    $idsSelect->columns('e.' . $this->getEntity()->getIdFieldName());
    $idsSelect->limit($limit, $offset);
    $idsSelect->resetJoinLeft();

    return $this->getConnection()->fetchCol($idsSelect, $this->_bindParams);
}

সুতরাং একক নির্বাচন থেকে সবকিছু পুনরুদ্ধার করা হয় এবং কোনও পুনরাবৃত্তির প্রয়োজন হয় না। অ্যাবস্ট্রাক্ট রিসোর্স মডেলটিতেও এটির মতো দেখাচ্ছে:

public function getAllIds()
{
    $idsSelect = clone $this->getSelect();
    $idsSelect->reset(Zend_Db_Select::ORDER);
    $idsSelect->reset(Zend_Db_Select::LIMIT_COUNT);
    $idsSelect->reset(Zend_Db_Select::LIMIT_OFFSET);
    $idsSelect->reset(Zend_Db_Select::COLUMNS);

    $idsSelect->columns($this->getResource()->getIdFieldName(), 'main_table');
    return $this->getConnection()->fetchCol($idsSelect);
}

সুতরাং প্রসারিত সমস্ত কিছু Mage_Core_Model_Resource_Db_Collection_Abstractঅন্যথায় নির্দিষ্ট না করে এটি ব্যবহার করা উচিত।

আপনি যে পদ্ধতিটি দেখেছেন তা বেস ক্লাস থেকে এসেছে Varien_Data_Collectionতবে এটি তার বাচ্চাদের মধ্যে ওভাররাইট করা আছে।


6

এই ক্ষেত্রে আপনি সংগ্রহ অবজেক্টটি ব্যবহার করতে পারেন

$collection = Mage::getModel('catalog/product')->getCollection()
   ->addAttributeToSelect('entity_id');

[...] 
do your loop
[...]

addAttributeToSelectকারণ entity_idসত্যই প্রয়োজন হয় না তবে প্রদর্শনের উদ্দেশ্যে আমি এটিকে রেখেছি, আপনার প্রয়োজনীয় ক্ষেত্রগুলি যুক্ত করুন এবং আপনি শেষ করেছেন!

সংগ্রহগুলি সম্পর্কে আরও আপনি এই উইকিপেজটিতে পাবেন


3

আরও অনুকূলিত

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->getSelect()->reset(Zend_Db_Select::COLUMNS);
$collection->getSelect()->columns('entity_id');
$collection1Ids[] = $collection->getAllIds();

এটি ডিফল্টরূপেও করা হয় ... দেখুন $this->_getClearSelect()
এসভি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.