2016-09-12 7 views
0

私は、3つのテーブルがrealated持ってここにinProducto、inProveedorとInProveedorProducto、私のrelashionship:フォームのエンティティフィールドの値を設定するにはどうすればよいですか? Symfony2の

inProveedorProducto:

class InProveedorProducto 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="InProducto", inversedBy="InProveedorProducto") 
    * @ORM\JoinColumn(name="id_producto", referencedColumnName="id_producto") 
    */ 
    protected $producto; 

    /** 
    * @ORM\ManyToOne(targetEntity="InProveedor", inversedBy="InProveedorProducto") 
    * @ORM\JoinColumn(name="id_proveedor", referencedColumnName="id") 
    */ 
    protected $proveedor; 

InProveedor:

class InProveedor 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="InProveedorProducto", mappedBy="InProveedor", cascade={"persist"}) 
    */ 
    protected $proveedorProducto; 

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

そしてInProducto:

class InProducto 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="InProveedorProducto", mappedBy="InProducto", cascade={"persist"}) 
    */ 
    protected $producto; 

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

私の問題は、私はhavですe InProveedorProductoの新しいフォームを開きますが、idProveedorフィールドは事前にユーザーを選択しておく必要があります。

私のコントローラ:私はデフォームを開くと

public function newAction() 
    { 
     $entity = new InProveedorProducto(); 
     $form = $this->createCreateForm($entity); 

     $form->get('idProveedor')->setData(1); 

     return $this->render('NivalInventarioBundle:InProveedorProducto:new.html.twig', array(
      'entity' => $entity, 
      'form' => $form->createView(), 
     )); 
    } 

、idProveedorある最初のフィールドは、我々はidProductoを選択して、価格を入れて数1

を記入しますが、表示されます作成しよう:

エラー:

An exception occurred while executing 'INSERT INTO in_proveedor_producto (id_proveedor, id_producto, precio_compra) VALUES (?, ?, ?)' with params [null, 21, 1]: 

それはのように思えますidProveedorはNULLになります。

マイinProveedorProductoタイプ:

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('idProveedor') 
      ->add('producto', 'entity', array(
       'class' => 'NivalInventarioBundle:InProducto', 
       'query_builder' => function (EntityRepository $er) { 
        return $er->createQueryBuilder('u') 
         ->orderBy('u.nombre', 'ASC'); 
       }, 
       'choice_label' => 'nombre', 
       'by_reference' => true, 
       'expanded' => false, 
       'placeholder' => 'Seleccione una opción', 
       'mapped' => true, 
       'multiple' => false 
      )) 
      ->add('precioCompra') 
     ; 

私を助けてください。

よろしく、

答えて

1

モデルと、いないフォームデータで動作します。

public function newAction() 
    { 
     $entity = new InProveedorProducto(); 
     $entity->setProveedor($this->get('doctrine')->getRepository('NivalInventarioBundle:InProveedor')->find(1)); 
     $form = $this->createCreateForm($entity); 

     return $this->render('NivalInventarioBundle:InProveedorProducto:new.html.twig', array(
      'entity' => $entity, 
      'form' => $form->createView(), 
     )); 
    } 

そしてちょうど

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('proveedor') 
      ->add('producto') 
      ->add('precioCompra') 
     ; 
+0

私は、コードを変更しましたが、私はこのエラーを取得: 「キャッチできる致命的なエラー:オブジェクトクラスのニーバル\ InventarioBundle \エンティティ\ InProveedorは、文字列に変換することができませんでした」 –

+0

InProveedorクラスにメソッド__toString()を追加するだけです。あなたが必要とするいくつかの最も重要なフィールドを返すべきです(例:fe name) –

関連する問題