2017-07-20 17 views
0

symfony 3.3.4でフォームを作成し、EntityTypeを使用してオブジェクトの選択リストを取得します。Symfony - EntityType selectは同じオプションを繰り返します

何らかの理由で、特定のエンティティを使用すると、データベーステーブルに異なるIDと名前の行が含まれていても、選択リストは同じIDを持つすべての同じオプションを返します。他のオブジェクトの追加正常に動作するために同じフォーマットを使用して

$form->add('projectComplexity', EntityType::class, array(
    'class' => 'AppBundle:ProjectComplexity', 
    'choice_label' => 'name', 
    'choice_value' => 'id', 
    'placeholder' => 'Choose an option', 
    'label_attr' => array('title' => 'Project complexity associated with this project'), 
    'query_builder' => function (EntityRepository $v) { 
     return $v->createQueryBuilder('v')->orderBy('v.name',' ASC'); 
    }, 
)) 

enter image description here

<?php 

namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\CheckboxType; 
use Symfony\Component\Form\Extension\Core\Type\TextareaType; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Doctrine\ORM\EntityRepository; 

class ProductType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('productCategory', EntityType::class, 
       array(
        'class' => 'AppBundle:ProductCategory', 
        'choice_label' => 'name', 
        'choice_value' => 'id', 
        'placeholder' => 'Choose an option', 
        'label_attr' => array('title' => 'Category for this product'), 
        'query_builder' => function (EntityRepository $v) { 
         return $v->createQueryBuilder('v') 
          ->orderBy('v.name',' ASC'); 
        } 
       )) 
      ->add('name',TextType::class) 
      ->add('detail',TextType::class) 
      ->add('description',TextareaType::class, array(
       'attr' => array('cols' => '80', 'rows' => '10') 
      )) 
      ->add('supportDescription',TextareaType::class, array(
       'attr' => array('cols' => '80', 'rows' => '10') 
      )) 
      ->add('isCircuit', CheckboxType::class, array('required' => false)) 
      ->add('deliveryType', EntityType::class, 
       array(
        'class' => 'AppBundle:DeliveryType', 
        'choice_label' => 'name', 
        'choice_value' => 'id', 
        'label_attr' => array('title' => 'Type of delivery for this product'), 
        'query_builder' => function (EntityRepository $v) { 
         return $v->createQueryBuilder('v') 
          ->orderBy('v.name',' ASC'); 
        } 
       )) 
      ->add('projectComplexity', EntityType::class, 
       array(
        'class' => 'AppBundle:ProjectComplexity', 
        'choice_label' => 'name', 
        'choice_value' => 'id', 
        'placeholder' => 'Choose an option', 
        'label_attr' => array('title' => 'Project complexity associated with this project'), 
        'query_builder' => function (EntityRepository $v) { 
         return $v->createQueryBuilder('v') 
          ->orderBy('v.name',' ASC'); 
        } 
       )) 
     ; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Product' 
      ) 
     ); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'app_bundle_product_type'; 
    } 
} 
+0

を言うとどうなりますか、コントローラーでは、あなたはそのQueryBuidlerクエリを繰り返し、結果をダンプ?それでも同じこと?または、異なる値が見えますか? –

+0

ごめんなさい、申し訳ありませんが、あなたはDBにある値をチェックしましたか?くそ、それはちょうど大丈夫に見えます。 –

+0

フルフォームタイプを投稿できますか? – ste

答えて

0

私はここで何が起こっていたかを考え出し:

はここで完全な形の型クラスです。 ProjectComplexityエンティティの構成上の問題は、データベースからのORMアノテーション構成のリバースエンジニアリングの結果でした。

私は最終的にIDのPKはBOOLEANた、ProjectComplexityのエンティティクラスに気づい:

/** 
* @var boolean 
* 
* @ORM\Column(name="id", type="boolean") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 

私はsymfony公式サイト上で説明したリバースエンジニアリングの方法を使用して、このエンティティを生成し、中列の定義を見ていましたそのテーブルのidカラムはtinyint(3)でした。リバースエンジニアリングがデフォルトでブール値に変換されると仮定できます。

私は整数を使用するために注釈を変更すると、予想通り、これは働いていた:

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 
関連する問題