2016-09-09 2 views
0

私はSymfony 2.7でアプリケーションを開発中ですが、OneToManyと関連するPRODUCT TABLE(InProducto)から別のテーブル(InUnidadMedida)にCRUDを生成しました。 編集フォームを開くと、ENIDTY FIELD(UNIDAD DE MEDIDAテーブルの選択フィールド)の値が常に関連テーブル(UNIDAD DE MEDIDA)の最初のオプションとして表示されます。編集フォーム(Symfony2)のデータベースから自分のエンティティフィールドに値を設定し、設定するにはどうすればよいですか?

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('nombre') 
      ->add('descripcion') 
      ->add('unidadMedida', 'entity', array(
       'class' => 'NivalInventarioBundle:InUnidadMedida', 
       'query_builder' => function (EntityRepository $er) { 
        return $er->createQueryBuilder('u') 
         ->orderBy('u.nombre', 'ASC'); 
       }, 
       'choice_label' => 'nombre', 
       'by_reference' => false, 
       'property' => 'type', 
       'expanded' => false, 
       'multiple' => false 
      )) 
} 

コントローラー:

private function createEditForm(InProducto $entity) 
    { 
     $form = $this->createForm(new InProductoType(), $entity, array(
      'action' => $this->generateUrl('inproducto_update', array('id' => $entity->getIdProducto())), 
      'method' => 'PUT', 
     )); 

     $form->add('submit', 'submit', array('label' => 'Guardar')); 

     return $form; 
    } 

Productoテーブル(エンティティ)

/** 
* InProducto 
* 
* @ORM\Table(name="in_producto") 
* @ORM\Entity 
*/ 
class InProducto 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="InSubLinea", inversedBy="InProducto") 
    * @ORM\JoinColumn(name="id_sub_linea", referencedColumnName="id_sub_linea") 
    */ 
    protected $subLinea; 

    /** 
    * @ORM\ManyToOne(targetEntity="InUnidadMedida", inversedBy="InProducto") 
    * @ORM\JoinColumn(name="id_unidad_medida", referencedColumnName="id_unidad_medida") 
    */ 
    protected $unidadMedida; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id_producto", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 

Unidadデ、それはテーブルINPRODUCTO

InProductoTypeのフィールドの値を取得すると仮定しますメディダテーブル(エンティティ)

/** 
* InUnidadMedida 
* 
* @ORM\Table(name="in_unidad_medida") 
* @ORM\Entity 
*/ 
class InUnidadMedida 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="InProducto", mappedBy="InUnidadMedida") 
    */ 
    protected $InProducto; 

    public function __construct() 
    { 
     $this->InProducto = new ArrayCollection(); 
    } 

答えて

0

頭を悩まの時間後に、それは非常に簡単だった、私は私のフィールドに次のプロパティを追加します。お時間を

 'by_reference' => true, 
     'mapped' => true, 

おかげでドミトリーMalyshenkoを。

+0

それは非常に奇妙です。デフォルトでこれらの値を設定する必要があります。それは、コード内でそれを再定義するものでなければなりません。 –

0

これらのエンティティを正しくマップした場合、フォームの種類は自動的にSymfonyによって推測されます。

だから、ちょうど

 ->add('unidadMedida', null, array(
      'choice_label' => 'nombre', 
      'expanded' => false, 
      'multiple' => false 
     )) 

作り、propertyとしてはそのようなオプションはありません。 property_pathを意味しましたか?

+0

私はコードを試しましたが、編集ボタンをクリックしてフォームを開いて製品を編集すると、unidadMedidaフィールドが空になります。はい、プロパティオプションは間違いです。 –

+0

InUnidadMedidaとInProductoの間の教義のマッピングを提供してください。 –

+0

私は要求された情報を追加しました。Dmitry Malyshenko –

関連する問題