2011-12-14 85 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

相关问题