2011-12-14 84 views
0

在我的過濾器中,字段的行爲是在數據庫表中搜索具有equal字段值的行以過濾形式。我想改變它的行爲,在數據庫表中搜索具有與表格(%LIKE%)中提供的字段值匹配的行/行的行。symfony過濾器將行爲從[field = value]更改爲[field LIKE%value%]

我知道可以通過在過濾器類中添加addFieldnameColumnQuery方法來完成,但是我想知道的是,還有其他方法嗎?

該字段恰好是一個外鍵,我希望它像普通文本字段一樣工作。

UPDATE:這是一個愚蠢的錯誤。我需要將一個sfWidgetFormFilterInput分配給widgetSchema,但我使用的是sfWidgetFormInput,它導致它尋找相等而不是匹配。

回答

1

我從來沒有聽說過另一種方式......看看位於lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\formsfFormFilterDoctrine類,以瞭解該系統的工作原理,以及如何編寫addFieldnameColumnQuery

UPDATE 要改變僅僅是爲了過濾行爲現場,說myfield,從外鍵正常文本你可以簡單的設置窗口小部件並在MymoduleFormFilter類的一些像這樣的代碼重寫getFields()

public function configure() 
    { 
     $this->setWidget('myfield', new sfWidgetFormFilterInput()); 
     $this->setValidator('myfield', new sfValidatorPass(array('required' => false))); 
    } 

    public function getFields() 
    { 
     $fields = parent::getFields(); 
     $fields['myfield'] = 'Text'; 
     return $fields; 
    } 

相反,如果你定義一個字段在你還沒有根據在generator.yml寫​​的字段名稱設置控件連接表搜索

filter: 
    display: [... some fields ..., myfield] 

,最後用添加addMyfieldColumnQuery(Doctrine_Query $query, $field, $values)加入,其中代碼。對不起,沒有片段,因爲我使用Propel。

+0

好吧,那就是我已經去過的地方,我的觀點是,這樣我們必須編寫3行代碼,也許相反,我們可以在一個地方更改generator.yml。 – prongs 2011-12-15 06:49:45

相關問題