2011-01-14 8 views
1


私のモジュールのモデルクラスのメソッドを使用する際に問題があります。
私は2つの保護されたメソッドをトリガーするpublic関数を持っています。問題は、最初の1だけが値を返すことです。 _getCustomerRedeeemedPoints()で、私はそれが正常に動作します$thisMage::getResourceModel('points/points_collection')によって置き換え、場合、Magento: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(); 
    } 
} 

今:
はここに私のクラスです。しかし、私は既にクラスを脇にしているので、私はメイジを介してそれをインスタンス化しなければならない理由を理解していません:私が理解する限り、$thisは1回のみ利用可能です。
だから私は何か間違っているのですか?
ありがとうございます。

答えて

0

これは、さまざまな目的のために$ thisオブジェクトにフィルタを追加することと関係があります。あなたのメソッドの先頭にこれを追加してみてください:

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

問題が解決しない場合は、お使いのgetFirstItem呼び出し前に、あなたのクエリをエコーし​​ようとすると、期待どおりに振る舞うかどうかを確認:

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

希望に役立つこと! 、とにかく答えるためありがとう、私は理由を理解していない...私はちょうど、コンピュータをオンにした、と今では何もせず、細かい作業ですが、:

おかげで、 ジョー

+0

ハムは、それは奇妙ですジョー。 – OSdave

関連する問題