2016-09-09 29 views
0

我正在使用Symfony 2.7中的應用程序,我從一個PRODUCT OneTable(InProducto)將OneToMany關聯到另一個表(InUnidadMedida)中生成CRUD。 當我打開編輯表單時,實體字段(UNIDAD DE MEDIDA表中的選擇字段)中的值總是出現在相關表(UNIDAD DE MEDIDA)的第一個選項中。而且它想獲得表INPRODUCTO如何在編輯表單(Symfony2)中將數據庫中的值設置爲我的實體字段?

InProductoType的字段中的值:

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") 

團結報德medida TABLE(entity)

/** 
* 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

我添加了請求的信息梅德Malyshenko –

相關問題