2011-05-23 102 views
0

我试图在symfony管理员的外键上设置一个多选过滤器。我想我已经正确地设置了一切,但由于某种原因,它不工作:多选外键过滤器

public function configure() 
{ 
    parent::configure(); 

    $s = Doctrine_Query::create()-> 
     from('Status s')-> 
     execute(); 

    $status_choices = array(); 
    foreach ($s as $key => $value) { 
     $status_choices[$value->getId()] = $value->getName(); 
    } 

    $this->widgetSchema['status_id'] = new sfWidgetFormChoice(array('choices' => $status_choices, 'multiple' => true, 'expanded' => true)); 

    $this->validatorSchema['status_id'] = new sfValidatorChoice(array('required' => false, 'choices' => $status_choices, 'multiple' => true)); 



} 

public function getFields() 
{ 

    $fields = parent::getFields(); 
    $fields['status_id'] = 'StatusId'; 
    return $fields; 

} 

public function addStatusIdQuery(Doctrine_Query $query, $field, $values) 
{ 
    $fieldName = $this->getFieldName($field); 

    if (!empty($values)) 
    { 
     $query->addWhereIn(sprintf('%s.%s', $query->getRootAlias(), $fieldName), $values); 
    } 
} 

任何帮助将不胜感激......

回答

2

在你validatorSchema,验证数据发布后,您必须使用array_keys($ status_choices) ,因为在发布表单后发送的值是键而不是标签。

而且addWhereIn不是Doctrine_Query方法,使用以及其中或其中

希望这将帮助你