【问题标题】:Add attribute to filter AND condition magento添加属性以过滤 AND 条件 magento
【发布时间】:2014-02-03 11:02:22
【问题描述】:

我正在尝试按名称过滤出可以从 a、b、c 和 d 字母开始的集合。

我尝试了以下代码

1) addFieldToFilter( 'm_name',array('like' => 'a%'), 'm_name',array('like' => 'b%'), 'm_name',array('like' => 'c%') )

2) addFieldToFilter(array(array('m_name','like' => 'a%'), array('m_name','like' => 'b%'), array('m_name','像' => 'c%'), ))

但这两个都只显示以字母“a”开头的名称集合。(不是 b、c 和 d)。请帮助我获得正确的收藏。

我也试过这段代码 $collection = Mage::getModel('manufacturers/manufacturers')->getCollection() ->addStoreFilter(Mage::app()->getStore(true)->getId()) ->addFieldToFilter('m_name',array(array('like'=>'a'.'%')) , array('like'=>'b'.'%'),array('like'=> 'C'。'%')) ->addFieldToSelect('*')->load();

但它仍然只显示以字母“a”开头的名称集合

【问题讨论】:

    标签: magento


    【解决方案1】:

    您搜索的不是AND,而是OR

    如果你 AND 一个 LIKE a% 和一个 LIKE b% 你总是会得到一个空的结果。这是因为同一个属性值只能以a OR b开头,而不能以a AND b开头。

    要为特定属性定义 OR 过滤器,您可以使用单个 addFieldToFilter() 调用并将数组数组传递给它:

    $collection = Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter(
            'm_name',
            array(
                array(
                    'like' => 'a%'
                ),
                array(
                    'like' => 'b%'
                )
            )
        );
    

    【讨论】:

      【解决方案2】:

      你好,检查下面的代码可能对你有帮助

      $collection = Mage::getModel('catalog/product')->getCollection()
                ->addAttributeToSort('name', 'asc')
                ->addFieldToFilter('name',array(array('like'=>'a%'), array('like'=>'b%'), array('like'=>'c%'), array('like'=>'d%')))
                    ->addAttributeToSelect('*');
      foreach ($collection as $product) {
            echo $product->getName() . "<br />";
      }
      

      【讨论】:

      • 每当我添加(addAttributeToSort 或 addAttributeToSelect)时都会发生错误.....Error says::Call to undefined method myPackageName_myModuleName_Model_Mysql4_myFolderName_Collection::addAttributeToSort()
      • 仅在您的上述集合中替换此代码 ->addFieldToFilter('m_name',array(array('like'=>'a%'), array('like'=>'b%' ), array('like'=>'c%'), array('like'=>'d%')))
      • okThanku 错误已解决。我没有正确放下右括号。我的代码是这样的:->addFieldToFilter('m_name',array(array('like'=>'a% ')) , array('like'=>'b%'), array('like'=>'c%'))
      • 现在我正在尝试按名称过滤集合,该集合可以从 m 到 p 字母范围开始。$mtopname = $collection->addFieldToFilter('m_name',array(array('like'= >'m%'), array('like'=>'n%'), array('like'=>'o%'), array('like'=>'p%'))) ->load ();但我总是得到第一个集合的结果,它是一个到 d 集合。
      • ok 通过使用这个函数 echo $mtopname->getSelect() 解决了。它将以sql查询形式给出magento集合,然后我们可以分析结果。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多