【问题标题】:Magento: Filtering a getCollection is not workingMagento:过滤 getCollection 不起作用
【发布时间】:2011-02-17 16:43:06
【问题描述】:

我的 getCollection 代码提供了错误的查询字符串(我认为)。

我有一个名为banner 的表,我可以轻松地加载所有记录。当我尝试过滤它时,我遇到了错误。

代码如下:

$banner = Mage::getModel('banner/banner')->getCollection()->addFieldToFilter('group', array('eq'=>'search_group'));

页面崩溃,我收到此错误:

1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group = 'search_group')' at line 1";i:1;s

如您所见,似乎代码在分组后弄乱了引号。

'group = 'search_group')'

谁能建议如何解决这个问题?

谢谢,

比利

【问题讨论】:

  • 注意我也试过用“like”代替“eq”..

标签: php sql zend-framework magento


【解决方案1】:

group 是一个 SQL 关键字。如果group 也是一个属性名称,您需要以某种方式对其进行转义。尝试使用反引号(Esc 下方通常未使用的键)。

$banner = Mage::getModel('banner/banner')
    ->getCollection()
    ->addFieldToFilter('`group`', 'search_group');

【讨论】:

    【解决方案2】:

    您误解了错误文本。

     to use near 'group = 'search_group')' 
    

    外部引号是将某些内容作为代码阻止的错误消息方式。这可能会更清楚

     to use near [group = 'search_group')]
    

    最好查看您的集合正在使用的选择(假设这里是一个非 eav 集合,给定您的 Module Creator 样式类别名)并尝试直接在您的 MySQL 客户端(PHPMyAdmin、命令行应用程序、查询分析器)中运行、Sequel Pro 等)

    header('Content-Type: text/plain');
    echo (string) $widget->getSelect();
    echo "\n";
    var_dump ( (string) $widget->getSelect());
    Mage::Log((string) $widget->getSelect());
    exit;
    

    在上下文中查看整个查询通常更容易发现错误。

    【讨论】:

      【解决方案3】:

      一种方法是:-

      在您的集合类中编写以下函数:-

      public function setGroupBy($group)
      {
          $this->getSelect()->group($group);
          return $this;
      }
      

      然后你可以像这样使用它:-

      $banner = Mage::getModel('banner/banner')->getCollection()->setGroupBy('search_group');
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-03-25
        • 2013-03-30
        • 1970-01-01
        • 2016-12-08
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多