2016-07-22 10 views
0

Verwenden Sie eine ParamConverter, um ein Objekt zu erhalten, scheint eine "nicht initialisierte" Instanz davon zu geben.ParamConverter Serialisierung nicht initialisiertes Objekt

Das Objekt ist teilweise geladen, dh seine Beziehungen werden nicht aus der Datenbank abgerufen.

Lassen Sie mich ein Beispiel geben:

Article 
    title 
    body 
    comments (Collection of Comment) 

Wenn ich ein Controller die Comment s eines gegebenen Article möchte ich dies tun würde

/** 
* @Route("/article/{id}/comments", 
*  name="article_comments", 
*  defaults={"_format": "json"} 
*) 
* @ParamConverter("article", class="AppBundle:Article") 
*/ 
public function purchaseOrderGetAction(Article $article) 
{ 
    return new JsonResponse($article->getComments()); 
} 

Das wird nichts, weil die Article schicken scheint nicht voll geladen zu sein.

dump($article); 

Gibt

DefaultController.php on line 42: 
Article {#1186 ▼ 
    -id: 1 
    -title: "My awesome article" 
    -body: "Here is the story of..." 
    -comments: PersistentCollection {#1224 ▼} 
    -snapshot: [] 
    -owner: Article {#1186} 
    -association: array:15 [ …15] 
    -em: EntityManager {#936 …11} 
    -backRefFieldName: "article" 
    -typeClass: ClassMetadata {#1213 …} 
    -isDirty: false 
    #collection: ArrayCollection {#1225 ▼ 
     -elements: [] 
    } 
    #initialized: false 
    } 
} 

Wie Sie sehen können, gibt es nichts auf dem Feld details geladen.

Muss ich das gesamte Objekt manuell laden oder gibt es eine Möglichkeit, nur die benötigten comments aus der Datenbank zu laden?

Antwort

0

zwang ich den träges Laden auf details mit

return new JsonResponse($article->getComments()->toArray()); 

Es erzeugt tatsächlich so viele Anfragen wie es Comment + 1 für die Article hat, aber ich habe nicht besser finden.