Symfony - 从具有关系

时间:2018-04-10 11:07:41

标签: php symfony deserialization

使用SF 2.8和序列化程序组件。

我有两个关系多对一的实体。

ENTITY 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...

ENTITY PLAN

...
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保存在DB表格计划的字段中,以便在需要时恢复数据;要做到这一点,首先我必须序列化数据并保存到数据库(DONE!)但是当我必须反序列化它们以恢复数据并将它们转换为对象时,我得到了这个错误:

类型错误:参数1传递给ComponentesBundle \ Entity \ Receta :: setUsuario()必须是UsuariosBundle \ Entity \ Usuario的实例,给定的数组,在C:\ xampp7 \ htdocs \ Dietas \ vendor \中调用第118行的symfony \ serializer \ Normalizer \ GetSetMethodNormalizer.php

我的控制器

...
$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);
...

我知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先,你可以在这里查看如何看起来像正确的实体和一对多的双向映射: Relationships in Doctrine 然后你在实体内部使用序列化器anotation策略,或者你可以为序列化器创建映射策略什么是序列化的,而不是