1

I have following doctrine model..

House doctrine entity

// 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; }
}

Following is Room entity

// 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 }
}

Problem ..

When I fetch one House entity using doctrine query, it fetches along with rooms objects. But, if I encoded them with json_encode() the values for rooms seen emtpy.

*Query.. *

$qb->select('h', 'r')
  ->from('House', 'h')
  ->where('id = ?1')
  ->leftJoin('h.rooms', 'r')
  ->setParameter('1', $houseId);

If I loop through the result set and print the individual item (including Room object within House) all properties print well. I tried with Zend\Json\Json::encode() as well. Still the rooms property is empty.

How can I 'json encode' to get the object array within the object to be serialized? Whats the trick?

4
  • Are you also using getters in jsonSerialize in your real entity? And what if you add $query->setFetchMode("House", "rooms", "EAGER"); to your query? Commented Jan 13, 2014 at 12:25
  • Thanks for your reply. but it is not helpful. The query builder is already doing this eager loading. Commented Jan 13, 2014 at 12:39
  • Can you show the rest of the code (the part where you're using json_encode())? Commented Jan 13, 2014 at 13:06
  • my actual entities have many properties, and entire code to post here is huge. I am using pattern and principle. There are layers of entity -> service -> controllers to go through. The above structure which I have posted is simple view to get the idea. Commented Jan 13, 2014 at 13:25

1 Answer 1

5

I found the solution: 'rooms' => $this->GetRooms()->toArray() That will work, because we need an Array, not an Array collection

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.