无法确定 magento 过滤器查询中的字段名称

Posted

技术标签:

【中文标题】无法确定 magento 过滤器查询中的字段名称【英文标题】:Cannot determine the field name in a magento filter query 【发布时间】:2011-09-25 22:49:44 【问题描述】:

我在 Magento 查询中使用 OR 过滤器时遇到问题。这是我用的:

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

我想要以下 WHERE 语句:WHERE 'status' = 'pending' OR (created_at < $startDate AND created_at > $finishDate) 但我收到以下错误消息

 Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'Cannot determine 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

我目前使用的是 1.6-2rc 版本。

【问题讨论】:

【参考方案1】:

Afaik 你不能为sales/order 模型使用addAttributeToFilter()OR 的两个属性。

改用addAttributeToSearchFilter()

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

这将创建一个 WHERE 子句:

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

【讨论】:

顺便说一句,您在问题的第一个代码部分下面提到的条件没有意义(至少对我而言)。因为它的意思是“包括同时创建的订单,之前 $startDate之后 $finishDate”,这很可能永远不会发生(除了你'重新使用奇怪的值^^)。我想这只是一个错字,对吧?

以上是关于无法确定 magento 过滤器查询中的字段名称的主要内容,如果未能解决你的问题,请参考以下文章

Access 中的组合过滤无法正常工作

magento 按位置排序过滤器选项

mysql 字段的基本查询

如何使用字段作为来自一个 graphql 查询的过滤器来获取位于单独查询中的流体图像?

从 Java 中的 GraphQL 查询中提取查询名称及其字段

有没有办法在 Magento 2.3 graphql 端点中使用动态过滤器查询产品?