У меня есть 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')
;
Пожалуйста, помогите мне.
Привет,
Я изменил код, но я получаю эту ошибку: "Catchable Фатальная ошибка: Объект класса Nival \ InventarioBundle \ Entity \ InProveedor не может быть преобразован в строку" –
Просто добавьте метод __toString() в свой класс InProveedor. Он должен вернуть вам наиболее значимое поле (имя f.e) –