2012-11-28 35 views
3

我在使用自定义表格收集日期过滤器时遇到困难。已经搜索herehere和其他一些地方,但仍然无法得到我所需要的。问题是我无法将NULL值添加到结果集中。Magento,按日期期限过滤收集并包含空值

到目前为止,经过多次试验和错误的测试我当前的代码:

$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()); 

此代码。OUPUTS下面的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在addfieldtofilter上有BETWEEN运营商吗?

回答

11

Got it!感谢这个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))) 

EDIT

从代替改性的banner_start_date如我用等的期间是错误地解决了,没有数据被返回。

+0

**至** <=> ** <=** not **> = ** – HoangHieu