4

カスタム テーブルを含むコレクションに日付フィルターを設定するのに苦労しています。ここここと他の場所を検索しましたが、まだ必要なものを取得できません。NULL問題は、結果セットに値を追加できないことです。

これまでのところ、いくつかの試行錯誤テスト後の私の現在のコード:

$myBannersCollection = Mage::getModel('banners/bannersadmin')->getCollection()
                   ->addfieldtofilter('banner_prod_id',$currentProdID)
                   ->addfieldtofilter('banner_start_date', 
                       array(
                         array('from' => Mage::getModel('core/date')->gmtDate()),
                                 'banner_start_date' => null))
                   ->addfieldtofilter('banner_end_date',
                       array(
                         array('gteq' => Mage::getModel('core/date')->gmtDate()),
                                 'null' => true)
                                  );
var_dump((string) $myBannersCollection->getselect());

このコードは、次の SQL スニペットを出力します。

SELECT `main_table`.* 
  FROM `dts_banners_admin` AS `main_table` 
 WHERE (banner_prod_id = '16')
  AND (((banner_start_date >= '2012-11-28 14:39:13') OR (banner_start_date='')))
   AND (banner_end_date IS NULL)

条件を追加するためにいくつかの異なるオプションを試しましたNULLが、次のようなものを取得する方法はありません:

SELECT `main_table`.* 
  FROM `dts_banners_admin` AS `main_table` 
 WHERE (banner_prod_id = '16')
  AND (((banner_start_date>='2012-11-28 14:39:13') OR (banner_start_date IS NULL)))
   AND ((banner_end_date >= '2012-11-28 14:39:13') OR (banner_end_date IS NULL))

PS: Magento にはBETWEENオペレーターがいaddfieldtofilterますか?

4

1 に答える 1

13

とった!このSO answerに感謝します。IS NULL句のためだけに別の配列を追加する必要がありました。コードは次のとおりです。

$myBannersCollection = Mage::getModel('banners/bannersadmin')->getCollection()
                   ->addfieldtofilter('banner_prod_id',$currentProdID)
                   ->addfieldtofilter('banner_start_date', 
                        array(
                         array('to' => Mage::getModel('core/date')->gmtDate()),
                                 array('banner_start_date', 'null'=>'')))
                   ->addfieldtofilter('banner_end_date',
                        array(
                         array('gteq' => Mage::getModel('core/date')->gmtDate()),
                             array('banner_end_date', 'null'=>''))
                                  );

そしてこれを出力します:

SELECT `main_table`.*
  FROM `dts_banners_admin` AS `main_table`
 WHERE (banner_prod_id = '16')
 AND (((banner_start_date>='2012-11-28 15:12:03') OR (banner_start_date IS NULL)))
   AND (((banner_end_date >= '2012-11-28 15:12:03') OR (banner_end_date IS NULL)))

編集

toの代わりにfrombanner_start_dateを使用していたように変更したため、期間が正しく設定されず、データが返されませんでした。

于 2012-11-28T15:15:00.973 に答える