2016-09-25 104 views
0

我有2個實體,InProveedorProducto有一個id_producto字段,InOrdenCompraDetalle有一個採購訂單的詳細信息,包括id_producto字段。 InProveedorProducto表中包含id_producto,但也包含id_proveedor,這意味着此表包含每個提供者的產品列表。如何從ManyToMany關係保存字段? Symfony2

所以,我喜歡的類型形式:

class InOrdenCompraDetalleType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    protected $idProveedor; 

    protected $idEmpresaa; 

    public function __construct ($id_proveedor,$id_empresaa) 
    { 
     $this->idProveedor = $id_proveedor; 
     $this->idEmpresaa = $id_empresaa; 
    } 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('ordenCompra') 
      ->add('productoOc', 'entity', array(
       'class' => 'NivalInventarioBundle:InProveedorProducto', 
       'query_builder' => function (EntityRepository $er) { 
        return $er->createQueryBuilder('u') 
         ->where('u.idProveedor = '.$this->idProveedor) 
         ->orderBy('u.productoO', 'ASC'); 
       }, 
       'choice_label' => function ($displayname) { 
            return $displayname->getDisplayName();}, 
       'by_reference' => true, 
       'expanded' => false, 
       'placeholder' => 'Seleccione una opción', 
       'mapped' => true, 
       'multiple' => false, 
      )) 
      ->add('cantidad'); 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Nival\InventarioBundle\Entity\InOrdenCompraDetalle' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'nival_inventariobundle_inordencompradetalle'; 
    } 

} 

我的實體InProveedorProducto

class InProveedorProducto 
{ 

    /** 
    * @ORM\ManyToMany(targetEntity="InOrdenCompraDetalle", inversedBy="productoOc") 
    * @ORM\JoinTable(name="InCompraDetalleProveedorProducto") 
    */ 
    protected $producto; 

我的實體InOrdenCompraDetalle

lass InOrdenCompraDetalle 
{ 
    /** 
    * @ORM\ManyToMAny(targetEntity="InProveedorProducto", mappedBy="producto") 
    */ 
    protected $productoOc; 

可否請你讓我知道爲什麼我得到這個錯誤時,嘗試保存到數據庫:

Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in C:\xampp\htdocs\nival7\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php on line 555 and defined 

請幫

回答

0

我想這是因爲你忘了這樣做在你__constructor()

class InProveedorProducto { 
    public function __construct(){ 
     $this->producto = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 
} 


class InOrdenCompraDetalle { 
    public function __construct(){ 
     $this->productoOc = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 
}