Symfony — Ошибка десериализации JSON из объектов с отношениями

Использование SF 2.8 и компонента сериализатора.

У меня есть 2 лица с отношениями многие к одному.

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 в поле плана таблицы БД, чтобы восстановить данные, когда они мне понадобятся; для этого сначала нужно сериализовать данные и сохранить их в БД (СДЕЛАНО!), но когда мне нужно десериализовать их для восстановления данных и преобразования их в объекты, я получаю эту ошибку:

Ошибка типа: Аргумент 1, передаваемый в ComponentesBundle \ Entity \ Receta :: setUsuario (), должен быть экземпляром 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);
...

Любая идея, как я могу решить это?

0

Решение

Во-первых, вы можете посмотреть, как должен выглядеть корректный объект и отображать для одного двунаправленного объекта:
Отношения в Учении
И после этого вы используете стратегию аннотации сериализатора внутри сущности или можете создать стратегию сопоставления для сериализатора, что правильно сериализовать, а что нет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector