Użyj zasady wykluczeń JMS.
Przykład wykorzystania adnotacji od kategorii podmiotu, których nie chcesz, aby obejmować dzieci i podmiotów związanych z produktów, które należy uwzględnić:
use ...
JMS\SerializerBundle\Annotation\ExclusionPolicy,
JMS\SerializerBundle\Annotation\Exclude,
...;
/**
* ...
* @ExclusionPolicy("none")
*/
class Category
{
/**
* ...
* @Exclude
*/
private $children;
/**
* ...
* @Exclude
*/
private $products;
}
Spójrz na JMSSerializer docs aby uzyskać więcej informacji.
EDIT:
Na przykład można stosować częściowe słowa kluczowego, aby wybrać tylko te dane, które potrzebujesz. Chociaż nie mogłem, dla mojego życia, wyłączyć ładowanie pełnych powiązanych obiektów (dwa poziomy w dół), jeśli przekażę obiekt obiektu do serializera (nawet po wyłączeniu obciążenia w DoctrineProxyHandler), , ale jeśli użyję tablicy, niż nie używa doktryny leniwego ładowania przez proxy (zgodnie z oczekiwaniami ofc).
Przykład wykorzystania Twojego przykład podmioty:
$dql = "SELECT t, s, partial b.{id}, partial ss.{id}
FROM Acme\AppBundle\Entity\Task t
JOIN t.story s
JOIN s.board b
JOIN b.stories ss"
$q = $this->_em-createQuery($dql);
$result = $q->getArrayResult();
ten sposób można dostać coś takiego:
[
{
id: 33,
title: "My Task",
story: [
{
id: 554,
board: [
{
id: 14,
stories: [
{
id: 554
},
{
id: 3424
},
{
id: 3487
}
]
}
]
}
]
}
]
PS: Intryguje mnie ten "problem". W każdym razie zobaczę, jak wymyślić rozwiązanie, jak serializować obiekt encji bez użycia wyniku tablicy.
myślę to samo pytanie zostało ben pisał tutaj: http://stackoverflow.com/questions/6706485/how-to-encode-doctrine-entities-to -json-in-symfony-2-0-ajax-application. Znajdziesz kilka odpowiedzi za pomocą JMSSerializer lub nie. –