我有一个带有自定义eav属性的自定义集合。我正在尝试创建自定义查询以筛选我的自定义集合。我要创建的"Where"条件应该如下所示:
(start_date <= $current_date AND active_to >= $current_date) OR unlimited = 1
这是我的代码:
$collection = Mage::getResourceModel('campaigns/campaign_collection')
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToSelect('*')
$collection->getSelect()->where(new Zend_Db_Expr("(start_at <= '" . $current_date . "' AND active_to >= '" . $current_date . "') OR unlimited = 1"));
但在这种情况下,我会得到一个错误,即找不到start_at列。
提前感谢
尝试使用addFieldToFilter(),如下所示:
$collection = Mage::getResourceModel('campaigns/campaign_collection')
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToSelect('*')
->addFieldToFilter(array(array('attribute' => 'start_date', 'gteq' => $current_date),array('attribute' => 'unlimited', 'eq' => '1')))
->addFieldToFilter(array(array('attribute' => 'active_to', 'lteq' => $current_date),array('attribute' => 'unlimited', 'eq' => '1')));
调用该函数两次后会使其表现得像"AND"运算符。"array('attribute"=>"unlimited","eq"=>"1")"应为"OR"运算符。
希望能有所帮助。
尝试打印您正在通过的查询$collection->printLogQuery(true);这将允许获得您的集合正在进行的查询,这样您就可以直接在数据库中进行验证。希望这能帮助