Magento: использовать различные методы в 1 модели - PullRequest
1 голос
/ 14 января 2011


У меня проблема с использованием методов в классе модели моего модуля.
У меня есть публичная функция, которая запускает 2 защищенных метода. Проблема в том, что только первое 1 возвращает значение.
Вот мой класс:

<?php
class Osdave_Points_Model_Mysql4_Points_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
    const POINTS_CONFIRMED = 2;
    const POINTS_REDEEMED = 4;

    protected $_customer;

    public function _construct()
    {
        parent::_construct();
        $this->_init('points/points');

        $this->_customer = Mage::getSingleton('customer/session')->getCustomer();
    }

    public function getCustomerAvailablePoints()
    {
        $confirmed = $this->_getCustomerConfirmedPoints();
        $redeemed = $this->_getCustomerRedeeemedPoints();
        $balance = ($confirmed - $redeemed);

        return $balance;
    }

    protected function _getCustomerConfirmedPoints()
    {
        $availablePoints = $this->addFieldToFilter('customer_id', $this->_customer->getId())
                            ->addFieldToFilter('points_status', self::POINTS_CONFIRMED)
                            ->addFieldToSelect('points_pending')
                            ->addExpressionFieldToSelect('available_points', 'SUM({{points_pending}})', 'points_pending');

        return $availablePoints->getFirstItem()->getAvailablePoints();
    }

    protected function _getCustomerRedeeemedPoints()
    {
        $redeemedPoints = $this->addFieldToFilter('customer_id', $this->_customer->getId())
                           ->addFieldToFilter('points_status', self::POINTS_REDEEMED)
                           ->addFieldToSelect('points_pending')
                           ->addExpressionFieldToSelect('redeemed_points', 'SUM({{points_pending}})', 'points_pending');

        return $redeemedPoints->getFirstItem()->getRedeemedPoints();
    }
}

Теперь, если в _getCustomerRedeeemedPoints () я заменил $this на Mage::getResourceModel('points/points_collection'), он работает нормально. Но так как я уже внутри класса, я не понимаю, почему я должен делать это через Маг : насколько я понимаю, $this доступен только один раз. Итак, я что-то не так делаю?
заранее спасибо.

1 Ответ

0 голосов
/ 14 января 2011

Я предполагаю, что это связано с добавлением фильтров к объекту $ this для различных целей. Попробуйте добавить это в начало ваших методов:

$this->getSelect()->reset();

Если это не сработает, попробуйте повторить ваши запросы перед вашими getFirstItem вызовами и посмотрите, ведут ли они себя должным образом:

Mage::log($this->getSelect()."");

Надеюсь, это поможет!

Спасибо, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...