【发布时间】:2018-04-10 11:07:40
【问题描述】:
使用 SF 2.8 和序列化组件。
我有 2 个具有多对一关系的实体。
实体USUARIO
...
class Usuario implements UserInterface
{
...
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="nombre", type="string", length=50)
*/
private $nombre;
/**
* @var string
*
* @ORM\Column(name="apellidos", type="string", length=100)
*/
private $apellidos;
...getters and setters...
实体计划
...
class Plan
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="\UsuariosBundle\Entity\Usuario", cascade={"persist"})
* @ORM\JoinColumn(name="usuario_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $usuario;
/**
* @var array
*
* @ORM\Column(name="json_dieta", type="json_array")
*/
private $jsonDieta;
...getters and setters...
如您所见,属性 $usuario(实体计划)与 $id(实体 usuario)相连。
我的目的是在数据库的表计划的一个字段中保存一个json,以便在需要时恢复数据;为此,首先我必须序列化数据并将其保存到数据库(完成!)但是当我必须反序列化它们以恢复数据并将它们转换为对象时,我会收到此错误:
类型错误:传递给 ComponentesBundle\Entity\Receta::setUsuario() 的参数 1 必须是 UsuariosBundle\Entity\Usuario 的实例,给定数组,在 C:\xampp7\htdocs\Dietas\vendor\ 中调用symfony\serializer\Normalizer\GetSetMethodNormalizer.php 第 118 行
我的控制器
...
$em = $this->getDoctrine()->getManager();
$plan =$em->getRepository('UsuariosBundle:Plan')->findOneByUsuario($user->getId());
$serializer = new Serializer(
array(new GetSetMethodNormalizer(), new ArrayDenormalizer()),
array(new JsonEncoder())
);
$jsonDeserializado = $serializer->deserialize($plan->getJsonDieta(), 'ComponentesBundle\Entity\Receta[][][]', 'json');
dump($jsonDeserializado);
...
知道如何解决这个问题吗?
【问题讨论】:
标签: php symfony deserialization