2011-02-17 73 views
0

我的getCollection代碼提供了錯誤的查詢字符串(我認爲)。Magento:過濾getCollection不起作用

我有一張桌子叫橫幅,我可以從容易加載所有記錄。當我嘗試過濾它時,我收到錯誤。

下面是代碼:

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

任何人都可以建議如何解決這個問題?

感謝,

比利

+0

請注意我也試過'喜歡'而不是'eq'.. – iamjonesy 2011-02-17 16:45:06

回答

3

group是一個SQL關鍵字。如果group也是一個屬性名稱,你需要以某種方式逃避它。嘗試使用反引號(通常未使用的密鑰在Esc以下)。

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

你曲解的錯誤文本。

to use near 'group = 'search_group')' 

外引號是以代碼的形式阻止某些事情的錯誤消息。這可能會是更清晰

to use near [group = 'search_group')] 

它總是最好看的選擇集合使用(這裏假設AA非EAV集合,給你的模塊造物主樣式類的別名),並嘗試直接在你的MySQL運行客戶端(PHPMyAdmin中,命令行應用程序,查詢分析器,續集專業等)

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

看到上下文中的整個查詢通常使察覺的錯誤更容易。

2

的一種方式將是: -

寫下面的函數在集合類: -

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

然後你可以使用它,如: -

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

希望這有助於。