我能';t使用my select symfony 2中的实体进行更新2

我能';t使用my select symfony 2中的实体进行更新2,symfony,Symfony,控制器 $builder ->add('tecnicoId', 'entity', array( 'class' => 'MainHomeBundle:Tecnicos', 'property' => 'nombre', 'expanded' => false, 'multiple' => false )) ->add('cambiar', 'submit') ; 查看细枝 $form = $this->crea

控制器

$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()));
当我单击进行更新时,出现以下错误

$builder
  ->add('tecnicoId', 'entity', array(
  'class'       => 'MainHomeBundle:Tecnicos',
  'property'    => 'nombre',
  'expanded' => false,
  'multiple' => false
 ))
->add('cambiar', 'submit')
;
ContextErrorException:可捕获的致命错误:类的对象 无法在中将Main\HomeBundle\Entity\Tecnicos转换为字符串 C:\xampp\htdocs\digitalfix\vendor\doctor\dbal\lib\doctor\dbal\Connection.php 第784行

当我看到sql的细节时,我看到tecnico_id的值是空的

执行“更新服务设置tecnico\u id”时发生异常 = ? 其中id=?'带有参数[{},1]:

技术实体是字符串名称

{{ form_errors(form.tecnicoId) }}
{{ form_widget(form.tecnicoId) }}
{{ form_widget(form.cambiar, { 'attr': {'class': 'boton'} }) }}
服务实体是一个整数,因为只插入了没有名称的技术id。

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;
    }

您的错误与SQL无关

似乎对象MainHomeBundle:Tecnicos遗漏了一个_toString()方法来在表单中显示所选实体

这是您的第一个错误所说的


向该实体添加一个_toString()方法。

将该方法添加到您的
Tecnicos
实体:

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;

您能否说明您是如何在Servicios实体类中定义与Tecnicos实体之间的关系的?数据库或实体中没有关系,只有要关联的id,也就是说,在em flush之前先转储$datos的内容,看看您得到了什么。我猜您尝试更新的Servicios实例包含实际的Tecnicos实体实例,单位为$tecnicoId(而不是id)…为什么要调用getter?这是个坏建议。如果是,则$this->name;现在进行更新,但保留数据库的字段0。您需要提供完整的FormType以及尝试将其映射到的对象。现在进行更新,但保留数据库的字段0