2017-03-29 5 views
1

ich eine Frage habe, ich Lehre seit 4 Jahren bin mit aber ich weiß nicht, ob er alle Daten eines Entity (einschließlich der Beziehungen) laden, wenn wir das Objekt zB suchen:Lehre 2 Performance Antwort

$entity = $entityManager->find('Entity', $id); 

In diesem Fall werden alle Beziehungsattribute gesetzt?

Ich habe eine Klasse mit vielen Attributen der Beziehung (OHNE featch = eifrig), ihre Ursache Überlastung?

Oder Lehre weiß, dass nur Beziehungen durchsucht wird, wenn Sie eine Get-Methode des Attributs verwenden?

, wenn Sie eine Dokumentation kennen, zu klären, schreiben Sie bitte einen Link

Antwort

1

Lazy Loading ist die Standardeinstellung. Die Sammlungsdaten werden nur zum Zeitpunkt des ersten Zugriffs aus der Datenbank abgerufen.

Wenn Sie möchten, dass die Daten direkt geladen werden, müssen Sie die spezifische Sammlung VERBINDEN und sie zur SELECT-Klausel hinzufügen. Oder verwenden Sie den EAGER Abrufmodus wie Sie erwähnt haben.

Von http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#entity-object-graph-traversal

[...] Statt Sie wieder eine echte Autor Instanz vorbei und eine Sammlung von Kommentaren Lehre wird Proxy-Instanzen für Sie erstellen. Nur wenn Sie zum ersten Mal auf diese Proxys zugreifen, durchlaufen sie den EntityManager und laden ihren Status von der Datenbank.

auch:

Verfahrgeschwindigkeit des Objektgraphen für Teile, die faul-geladen sind, werden leicht viele SQL-Abfragen auslösen und ausführen schlecht verwendet, wenn stark zu. Stellen Sie sicher, dass Sie DQL verwenden, um alle Teile des Objektgraphen, die Sie benötigen, so effizient wie möglich abzurufen.