开发者

Cannot determine the field name in a magento filter query

I'm having trouble with using an OR filter in a Magento query. This is what i used:

 $collection = Mage::getModel('sales/order')->getCollection()
         ->addAttributeToSelect('*')
         ->addAttributeToFilter(
                            array(
                               array('attribute'=>'status','eq'=>'pending'), 
                               array('attribute'=>'created_at', 'from'=>$startDate, 'to'=>$finishDate)
                            )
     );

I want the following WHERE statement: WHERE 'status' = 'pending' OR (created_at < $startDate AND created_at > $finishDate) but i get the following error message

 Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'Cannot d开发者_如何学运维etermine the field name.' in /home/content/r/o/n/ronakkaria/html/magento/app/Mage.php:563 
 Stack trace: 
 #0 /home/content/r/o/n/ronakkaria/html/magento/app/code/core/Mage/Sales/Model/Resource/Collection/Abstract.php(52): Mage::throwException('Cannot determin...') 
 #1 /home/content/r/o/n/ronakkaria/html/magento/app/code/core/Mage/Sales/Model/Resource/Collection/Abstract.php(80): Mage_Sales_Model_Resource_Collection_Abstract->_attributeToField(Array) 
 #2 /home/content/r/o/n/ronakkaria/html/new/admin/magentoInvoice/getInvocieList.php(43): Mage_Sales_Model_Resource_Collection_Abstract->addAttributeToFilter(Array) 
 #3 {main} thrown in /home/content/r/o/n/ronakkaria/html/magento/app/Mage.php on line 563

I am currently using version 1.6-2rc.


Afaik you cannot use addAttributeToFilter() to OR two attributes for the sales/order model.

Use addAttributeToSearchFilter() instead:

$startDate = '2011-01-01';
$finishDate = '2011-01-31';

var_dump(
    Mage::getModel('sales/order')->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToSearchFilter(
       array(
            array(
                'attribute' => 'status',
                'eq' => 'pending'
            ),
            array(
                'attribute' => 'created_at',
                'from' => $startDate,
                'to' => $finishDate
            )
       )
    )
    ->getSelectSql(true)
);

This will create a WHERE clause of:

WHERE 
    (status = 'pending') OR 
    (created_at >= '2011-01-01' AND created_at <= '2011-01-31')
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜