Doctrine ORM对象类型列未被序列化

时间:2015-09-21 17:40:10

标签: php symfony doctrine-orm

我正在开发一个REST api,我有一个类型为object的列作为我的User类的属性。在我的用户实体中,我有:

/**
 * @var stdClass
 * @Serializer\Expose
 * @Serializer\Groups({"list", "details"})
 * @ORM\Column(type="object", name="notifications")
 */
protected $notifications;

创建新用户时,我会使用不同通知的默认值初始化此字段,如下所示:

$_notifications = new \stdClass();

$_notifications->voucherSold = true;
$_notifications->voucherRedeemed = true;
$_notifications->newConnection = true;

$user->setNotifications($_notifications);

我可以看到此字段正在正确写入数据库。在我的数据库中,在notifications列下,我得到:

O:8:"stdClass":3:{s:11:"voucherSold";b:1;s:15:"voucherRedeemed";b:1;s:13:"newConnection";b:1;}

但是当我通过API加载此用户时,我最终在通知字段中输入了一个空对象:

{
  "resource": "vendors/39",
  "id": 39,
  "email": "test@user.com",
  "notifications": {},
  "company": "",
  "address": "",
  "city": "",
  "state": "",
  "zipcode": "",
  "phone": "",
  "website": ""
}

我无法弄清楚为什么价值没有通过。有任何想法吗?感谢。

1 个答案:

答案 0 :(得分:1)

json编码器可能只将数组转换为json,并且只是将对象设置为对象{},而不是查看字段等等。

尝试将$_notifications对象转换为数组,然后再返回它:

$user->setNotifications((array) $_notifications);