我无法在我的select symfony 2中使用实体进行更新

时间:2015-06-18 07:01:35

标签: symfony

$builder
  ->add('tecnicoId', 'entity', array(
  'class'       => 'MainHomeBundle:Tecnicos',
  'property'    => 'nombre',
  'expanded' => false,
  'multiple' => false
 ))
->add('cambiar', 'submit')
;

控制器

$form = $this->createForm(new ServicioseditType(), $datos);
$form->handleRequest($request);

$em = $this->getDoctrine()->getManager();
$em->flush();

return $this->render('MainHomeBundle:Admin:editserv.html.twig', array("form"=>$form->createView()));

查看树枝

{{ form_errors(form.tecnicoId) }}
{{ form_widget(form.tecnicoId) }}
{{ form_widget(form.cambiar, { 'attr': {'class': 'boton'} }) }}

当我点击进行更新时会出现以下错误

  

ContextErrorException:Catchable Fatal Error:类的对象   Main \ HomeBundle \ Entity \ Tecnicos无法转换为字符串   C:\ XAMPP \ htdocs中\ digitalfix \供应商\原则\ DBAL \ LIB \原则\ DBAL \ Connection.php   第784行

当我看到sql的详细信息时,我看到tecnico_id的值为空

  

执行'UPDATE servicios SET tecnico_id时发生异常   =? WHERE id =?'与params [{},1]:

技术实体是字符串名称

class Tecnicos
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     * 
     * @Assert\NotBlank()
     * @Assert\Length(
     * min = 8,
     * max = 55,
     * minMessage = "{{ limit }} caracteres minimo",
     * maxMessage = "{{ limit }} caracteres maximo"
     * )
     *
     * @ORM\Column(name="nombre", type="string", length=55, nullable=false)
     */
    private $nombre;

    public function __toString()
    {
        return $this->nombre;
    }

服务实体是一个整数,因为只插入了没有名称的技术ID。

class Servicios
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="cliente_id", type="integer", nullable=false)
     */
    private $clienteId;

    /**
     * @var integer
     *
     * @ORM\Column(name="tecnico_id", type="integer", nullable=true)
     */
    private $tecnicoId = 1;

2 个答案:

答案 0 :(得分:1)

将此方法添加到Tecnicos实体:

public function __toString()
{
    return $this->name; // could be anything that returns a string, even a string itself (but wouldn't be relevant).
}

答案 1 :(得分:0)

您的错误与您的SQL无关。

看起来像Object MainHomeBundle:Tecnicos错过了一个__toString()方法来显示表单中的选定实体。

这是你的第一个错误。

向此实体添加__toString()方法。