我有以下学说模型。
众议院学说实体
// Below are not my real object. These are example similar to my originals
// Doctrine entity
class House implements JsonSerializable {
// Doctrine properties
protected $id; // doctrine id field
protected $rooms; // rooms : one-to-many relation to Room doctrine entity.
// serializer
public function jsonSerialize() {
return [
'id' => $this->GetId(),
'rooms' => $this->GetRooms(),
];
}
// Getters & setters.
public GetId() { return $this->id; }
public SetId($id) { $this->id = $id }
public GetRooms() { return $this->rooms; }
public SetRooms($rooms) { $this->rooms = $rooms; }
}
以下是房间实体
// Doctrine entity
class Room implements JsonSerializable {
protected $id; // doctrine id field
// serializer
public function jsonSerialize() {
return [
'id' => $this->GetId(),
];
}
// Getters & setters.
public GetId() { return $this->id; }
public SetId($id) { $this->id = $id }
}
问题。。
当我使用学说查询获取一个House
实体时,它会与rooms
对象一起获取。但是,如果我用json_encode()
编码它们,则看到rooms
emtpy 的值。
*查询.. *
$qb->select('h', 'r')
->from('House', 'h')
->where('id = ?1')
->leftJoin('h.rooms', 'r')
->setParameter('1', $houseId);
如果我循环遍历结果集并打印单个项目(包括House
中的Room
对象),则所有属性都打印良好。我也尝试过ZendJsonJson::encode()
。rooms
属性仍然是空的。
如何"json 编码"以获取要序列化的对象中的对象数组?有什么诀窍?
我找到了解决方案:'rooms' => $this->GetRooms()->toArray()这将起作用,因为我们需要一个数组,而不是一个数组集合。