2016-03-15 92 views
0

我试图用“select”来显示一个表单,其中是来自查询的“选项”。Symfony 2,从数据库中选择

$results = $conn->query(" select gsm, name from Contact"); 
$row = $results->fetchAll(); 

,之后我试图用这个

foreach($row as $lign) 
    $centretechnique[$lign['gsm']] = $lign['name']; 

和formbuilder

$form->add('centretechnique', 'choice', array('required' => false, 'error_bubbling' => true, "empty_value" => "Choisir ", 'choices' => $centretechnique)); 

我想,以显示与价值= GSM选择选项和显示值的列表是name

这种方法让我显示,但问题是,如果我有dupl icate选项,只显示选项。

例如,该请求的结果是

array (size=2) 
    0 => 
    array (size=2) 
     'gsm' => string '628436515' (length=9) 
     'name' => string 'name1' (length=7) 
    1 => 
    array (size=2) 
     'gsm' => string '628436515' (length=9) 
     'name' => string 'name 2' (length=4) 

只是一种选择将被显示。

任何帮助,请

回答

1

如果要填充选择从数据库中形成的类型,那么你应该使用form entity type

事情是这样的:

$form->add(
    'centretechnique', 
    'entity', 
    array(
     'class' => 'MyBundle:Contact', 
     'query_builder' => function (EntityRepository $er) { 
      return $er->createQueryBuilder('c') 
       ->orderBy('c.name', 'ASC'); 
     }, 
     'choice_label' => 'name', 
     'choice_value' => 'gsm', 
     'multiple'  => false, 
     'expanded'  => false, 
     'required'  => false, 
    ) 
) 
0

通过建立你的选择,你做的事:

$centretechnique[$lign['gsm']] = $lign['name']; 

所以代码确实与第二覆盖第一选择,因为你使用相同的键两次...