0

Magento 1.7.2でカスタム コレクションをフィルタリングできるかどうか疑問に思っていました。 私の現在のコードは次のようになります。

$collection = $model->getCollection()
   ->addFieldToFilter('gc_id',array('gt' => 0))
   ->addFieldToFilter('expiration_date', array('lteq' => Mage::getModel('core/date')->gmtDate()));

生成されたクエリを印刷できます。MySQL で実行すると、適切なテーブル行が得られます。ただし、返されるコレクションにはアイテムがありません。フィルターを使用しないコレクションでも適切なアイテムがすべて返されるため、コレクションの実装に問題はありません。コレクションクラスはから継承しますMage_Core_Model_Resource_Db_Collection_Abstract

クエリ:

SELECT `main_table`.* FROM `st_freegiftcard` AS `main_table` WHERE (gc_id > 0) AND (expiration_date <= '2013-11-15 23:59:20')

現在の醜い回避策:

  foreach($collection as $free_gc){
        if($free_gc->getGcId() > 0 
             && $free_gc->getExpirationDate() <= Mage::getModel('core/date')->gmtDate()){
           ...
        }
   }
4

3 に答える 3

1

xDebug に頼りすぎて失敗したのかもしれません。コレクションが addFieldToFilter() メソッドによってフィルタリングされているようです。アイテムが表示されなかったのは、Magento の遅延読み込みが原因でした。$collection を使用する必要があり、その時点でのみアイテムをクエリします。

于 2013-11-18T21:21:29.950 に答える
1

100%確信はありませんが、これが必要です:addAttributeToFilter

- addAttributeToSelect: To add an attribute to entities in a
   collection, * can be used as a wildcard to add all available
   attributes
 - addFieldToFilter: To add an attribute filter to a collection, this
   function is used on regular, non-EAV models
 - addAttributeToFilter: This method is used to filter a collection of
   EAV entities
 - addAttributeToSort: This method is used to add an attribute to sort
   order

お役に立てば幸いです、乾杯

于 2013-11-16T13:09:34.393 に答える