我正在尝试序列化移动摘要的实体。我有这个实体类:
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Entity\User as BaseUser;
/**
* xxx\xxx\Entity\User
*
* @ORM\Table()
* @ORM\Entity()
* @ORM\Entity(repositoryClass="xxx\xxx\Entity\UserRepository")
*/
class User extends BaseUser
{
/**
*
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @ORM\OneToMany(targetEntity="\xxx\xxx\Entity\Music", mappedBy="user")
*/
protected $musics;
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @ORM\OneToMany(targetEntity="\xxx\xxx\Entity\Message", mappedBy="user")
*/
protected $messages;
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @ORM\OneToMany(targetEntity="\xxx\xxx\Entity\Location", mappedBy="user")
*/
protected $locations;
public function __construct()
{
parent::__construct();
$this->musics = new ArrayCollection();
$this->messages = new ArrayCollection();
$this->locations = new ArrayCollection();
}
}
现在,当我在DefaultController.php
:
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$array = $em->getRepository('xxxBundle:User')
->findLatest();
$serializer = $this->get('serializer');
$response = $serializer->serialize($array, 'json'); //THIS LINE THROWS EXCEPTION
我在use Doctrine\Common\Collections\ArrayCollection;
中有DefaultController.php
,但似乎错误来自JMSSerializerBundle
内部。
Doctrine
注释以\
开头,但这没有帮助使用app/console
自动生成类。
答案 0 :(得分:2)
答案 1 :(得分:0)
此解决方案有效!
我正在使用 JMSSerializerBundle 并且在序列化实体中我有 ManyToOne
关系。为此,我使用了属性 $product
,当然还有 setter
和 getter
。如果序列化程序尝试获取产品,我会收到同样的消息,因为它不了解如何将相关实体转换为字符串/整数。我使用自定义方法 getProductId
添加访问器并在此方法中返回
$this->product->getId()
JMS\Serializer\Annotation as Serializer
@Serializer\Accessor(getter="getProductId")
在 OneToMany
关系中,在自定义 get
方法中,我将 ArrayCollection 返回为 Array $this->statuses->toArray()
关系实体也可以考虑转换器,不过我没试过(没时间)