2016-09-12 5 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 заполняется с номером 1.

ТОГДА мы выбираем idProducto и поставить цену, но когда пытаются создать:

Ошибка:

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

Похоже idProveedor отправляет NULL.

типа My 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

Я изменил код, но я получаю эту ошибку: "Catchable Фатальная ошибка: Объект класса Nival \ InventarioBundle \ Entity \ InProveedor не может быть преобразован в строку" –

+0

Просто добавьте метод __toString() в свой класс InProveedor. Он должен вернуть вам наиболее значимое поле (имя f.e) –

Смежные вопросы