2

Is there a method to add group prices (for one or more customer groups) to product collections?

Actually I have this ...

/** @var Mage_Catalog_Model_Resource_Product_Collection $products */
$products = Mage::getResourceModel('catalog/product_collection')
    ->addAttributeTo ...

if ($groupId) {
    $products->joinTable(
        array('group_price_'.$groupId => 'catalog/product_attribute_group_price'),
        'entity_id = entity_id',
        array('group_price_'.$groupId => 'group_price_'.$groupId.'.value'),
        array('customer_group_id' => $groupId)
    );
}

It works and I can get group price with $product->getData('group_price_X'), but is there something built-in?

0

Cheaper prices (as it can conceptually be group_price, per customer_group) should be joined when calling addMinimalPrice()

public function addMinimalPrice()
{
    return $this->addPriceData();
}

And so...

public function addPriceData($customerGroupId = null, $websiteId = null)
{
    $this->_productLimitationFilters['use_price_index'] = true;

    if (!isset($this->_productLimitationFilters['customer_group_id']) && is_null($customerGroupId)) {
        $customerGroupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
    }
    if (!isset($this->_productLimitationFilters['website_id']) && is_null($websiteId)) {
        $websiteId       = Mage::app()->getStore($this->getStoreId())->getWebsiteId();
    }

    if (!is_null($customerGroupId)) {
        $this->_productLimitationFilters['customer_group_id'] = $customerGroupId;
    }
    if (!is_null($websiteId)) {
        $this->_productLimitationFilters['website_id'] = $websiteId;
    }

    $this->_applyProductLimitations();

    return $this;
}

However, if you need to get all possible group prices (without caring if they are the best possible price), then I think there is no built-in method better than your approach

  • Thanks, but I need the group prices w/o carring about best price. – sv3n Jul 5 '18 at 19:37
0

Not added to collection, but it works too ... :)

You can get a particular group price with this:

/** @var Mage_Catalog_Model_Product $product */
foreach ($products as $product) {
    var_dump($product->setCustomerGroupId($groupId)->getGroupPrice());
}

To get all group prices:

/** @var Mage_Catalog_Model_Product $product */
foreach ($products as $product) {
    $product->getGroupPrice();
    var_dump($product->getData('group_price'));
}

Or:

/** @var Mage_Catalog_Model_Product $product */
foreach ($products as $product) {
    $product->getResource()->getAttribute('group_price')->getBackend()->afterLoad($product);
    var_dump($product->getData('group_price'));
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.