我有两张桌子:
对于表格中的每条新记录 Liquidaciones ,我需要在表格外设置字段值 comisiones_id (例如:2)
这是一种特殊情况,因为 comisiones_id 字段与表 Comisiones
相关当我尝试设置值时,在 LiquidacionesController.php 中设置:
$liquidacione = new Liquidaciones();
$form = $this->createForm('BackendBundle\Form\LiquidacionesType', $liquidacione);
$form->get('comisiones')->setData('2');
$form->handleRequest($request);
我收到以下错误消息:
Catchable Fatal Error: Argument 1 passed to BackendBundle\Entity\Liquidaciones::setComisiones() must be an instance of BackendBundle\Entity\Comisiones, string given, called in C:\proyectos\cursospierobis\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 556 and defined
我做错了什么?
这是我的档案:
LiquidacionesController.php
public function newAction(Request $request)
{
$liquidacione = new Liquidaciones();
$form = $this->createForm('BackendBundle\Form\LiquidacionesType', $liquidacione);
$form->get('comisiones')->setData('2');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($liquidacione);
$em->flush();
return $this->redirectToRoute('liquida_show', array('id' => $liquidacione->getId()));
}
return $this->render('liquidaciones/new.html.twig', array(
'liquidacione' => $liquidacione,
'form' => $form->createView(),
));
}
LiquidacionesType.php
class LiquidacionesType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nroLiqui')
->add('fechaPago', null, array('widget' => 'single_text'))
->add('monto')
->add('observaciones')
->add('comisiones', 'hidden')
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'BackendBundle\Entity\Liquidaciones'
));
}
}
实体 Liquidaciones.php :
namespace BackendBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Liquidaciones
*
* @ORM\Table(name="liquidaciones", indexes={@ORM\Index(name="fk_Liquidaciones_Comisiones1_idx", columns={"comisiones_id"})})
* @ORM\Entity(repositoryClass="BackendBundle\Entity\LiquidacionesRepository")
*/
********************
public function setComisiones(\BackendBundle\Entity\Comisiones $comisiones)
{
$this->comisiones = $comisiones;
return $this;
}
/**
* Get comisiones
*
* @return \BackendBundle\Entity\Comisiones
*/
public function getComisiones()
{
return $this->comisiones;
}
修改
使用 Iaroslav Gashuk 提出的解决方案,代码如下:
LiquidacionesController.php
public function newAction(Request $request )
{
$liquidacione = new Liquidaciones();
$form = $this->createForm('BackendBundle\Form\LiquidacionesType', $liquidacione);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$comisiones = $this->getDoctrine()->getManager()->getRepository('BackendBundle:Comisiones')->findOneById(4);
$liquidacione->setComisiones($comisiones);
$em = $this->getDoctrine()->getManager();
$em->persist($liquidacione);
$em->flush();
return $this->redirectToRoute('liquidaciones_show', array('id' => $liquidacione->getId()));
}
return $this->render('liquidaciones/new.html.twig', array(
'liquidacione' => $liquidacione,
'form' => $form->createView(),
));
}
答案 0 :(得分:1)
您必须传递Comisiones
实体的实例而不是其ID