2011-05-23 166 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方法,使用以及其中或其中

希望這將幫助你