Ich habe 3 Doktrinsentitäten. Einer ist User
, der zweite ist Product
und der dritte ist ProductUsers
. SoWie begrenzt man OneToMany/ManyToOne Assoziationen Tiefe/Schleife in Doctrine2?
, User
haben OneToMany
Verbindung mit ProductUsers
und die gleichen Product
haben OneToMany Verbindung mit ProductUsers
. ProductUsers
hat ManyToOne
Assoziation mit beiden User
und Product
. Wie so:
class Product
{
/**
* @var ProductUsers
*
* @ORM\OneToMany(targetEntity="ProductUsers", mappedBy="product")
*/
private $productUsers;
}
class ProductUsers
{
/**
* @var Product
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Product", inversedBy="productUsers")
* @ORM\JoinColumn(name="product_ID", referencedColumnName="ID")
*/
private $product;
/**
* @var User
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="User", inversedBy="productUsers")
* @ORM\JoinColumn(name="user_ID", referencedColumnName="ID")
*/
private $user;
// extra fields ...
}
class User
{
/**
* @var ProductUsers
*
* @ORM\OneToMany(targetEntity="ProductUsers", mappedBy="user")
*/
private $productUsers;
}
Ein Benutzer kann mehrere Produkte verwenden und ein Produkt kann mehrere Benutzer haben. ProductUsers
hat einige zusätzliche Informationen über die Beziehung als nur die Beziehung.
Das Problem ist, wenn ich ein User
Objekt hole, kommt es mit verbundenen ProductUsers
und es ist Product
verbunden. Nicht nur das, aber die kommt auch mit allen es ist ProductUsers
und es ist User
Objekte, die ziemlich viel Aufwand ist.
This Frage bezieht sich eng auf mein Problem.
Ich versuche, das auf Doktrin-Ebene wie JMSSerializerBundle MaxDepth
zu begrenzen. Gibt es eine Möglichkeit, diesen Overhead in der Doktrin zu begrenzen?
So funktioniert Doctrine. Die Sammlung, die Sie erhalten, sollte faule Sammlungen sein, dh, nur wenn Sie auf die zugrunde liegenden Daten zugreifen, werden die tatsächlichen Daten aus der Datenbank abgerufen. Standardmäßig wird beim Abrufen eines Benutzers nur die Abfrage SELECT * FROM Benutzer ausgeführt. Um Datensätze auf einmal (nicht faul) zu holen, müssen Sie ihnen in einer ORM-Abfrage beitreten. Select: $ qb-> select ('u', 'up') – mblaettermann