Nur ID aus Entitätsbeziehungen abrufen, ohne das gesamte Objekt in Doctrine abzurufen
Nehme an, ich habe eine Entität, die Referenzen selbst anzeigen Eltern-Kind-Beziehungen
class Food
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Food", inversedBy="foodChildren")
* @ORM\JoinColumn(name="food_group_id", nullable=true)
*/
protected $foodGroup;
/**
* @ORM\OneToMany(targetEntity="Food", mappedBy="foodGroup", fetch="LAZY", cascade={"remove"})
*/
protected $foodChildren;
Ich habe einen Anwendungsfall, wo ich will food_group_id
einer Entität ohne die erste vollständige übergeordnete Objekt aus der Datenbank. Mit fetch="LAZY"
nicht halten die Lehre von der Abfrage wieder. Gibt es eine Möglichkeit, wieder nur die ID bekommen, wenn $food->getFoodGroup()
?
InformationsquelleAutor der Frage rabudde | 2013-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht Ihr Leben erschweren, können Sie nur
Diese NICHT führen Sie keine weiteren Abfragen oder auslösen lazy load!
Warum? Weil Ihr
$food->foodGroup
ist ein proxy-Objekt, das weiß, über seine ID. Es wird nur faul Last wenn Sie rufen Sie eine get-Methode, der ein paar Felder, die bisher nicht geladen.InformationsquelleAutor der Antwort Igor Pantović
Können Sie
bekommen id ' s, ohne dass joins.
In deinem Beispiel würde es so etwas wie dieses:
Diese Weise erhalten Sie die food_group_id ohne extra beitreten.
InformationsquelleAutor der Antwort Noquepoaqui
Sollten Sie in der Lage sein zu definieren, das ID-Feld, verbinden es mit dem ORM, und erstellen Sie dann den getter für das Feld, und es sollte Arbeit.
Hinweis, ich änderte den Namen des Feldes in meinem Beispiel zu "Pascal Case", für Konsistenz. Auch ich bin neu in Symfony, aber Ihre ManyToOne Assoziation mapping scheint merkwürdig zu sein. Ich bin mir nicht sicher, warum Sie nullable auf die Person (nur ich noch nicht gesehen). Sie müssen nicht ein referencedColumnName="id", aber vielleicht ist das auch nur, weil es standardmäßig auf "id" (ich mag eindeutig sein). Sehen Lehre docs.
Hatte ich ein sehr ähnliches problemder verursacht wurde, nur weil ich noch nicht verbunden, das Feld mit dem ORM. So sollten Sie wissen, dass es möglich IST zu nennen:
InformationsquelleAutor der Antwort Chadwick Meyer
Ich bin mir nicht sicher, ob das ein performance-Problem und versuchen, zu begrenzen Abfragen, aber warum nicht einfach etwas tun, wie dieses in Ihrem getter (ich gehe davon aus, dass Ihre Lebensmittel Entität mit Doctrine ORM Annotationen):
oder noch besser, nennen Sie es angemessen
getFoodGroupId()
InformationsquelleAutor der Antwort Ken Hannel