2016-03-15 111 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']; 

所以代碼確實與第二覆蓋第一選擇,因爲你使用相同的鍵兩次...