Ich habe ein Unternehmen mit einer ManyToMany Beziehung mit der Benutzertabelle:Symfony Querybuilder: zu viele Anfragen
/**
* @ORM\ManyToMany(targetEntity="User")
* @ORM\JoinTable(
* name="offer_allowedusers",
* joinColumns={
* @ORM\JoinColumn(name="offer_id", referencedColumnName="id", onDelete="CASCADE")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
* }
*)
*/
private $allowedUsers;
Und in Form, ich mag eine Dropdown-Liste angezeigt werden (select2 verwenden) auszuwählen, die Benutzer können:
, das zu tun, habe ich in Form Gebäude:
->add('allowedUsers', EntityType::class, [
'class' => 'AppBundle\Entity\User',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.username', 'ASC');
},
'label' => 'Allowed users',
'required' => false,
'multiple' => true
])
Das Problem ist, dass es eine Abfrage für jeden Benutzer macht, den Benutzernamen zu bekommen ... Also, wenn ich 500 Benutzer haben, macht es 500 Abfragen ...
Wie optimieren und eine einzige Abfrage ausführen, um alle Datensätze abzurufen?
Haben Sie die __toString() - Methode in Ihrer Benutzerklasse implementiert? Diese Methode würde den Benutzernamen – Mz1907
zurückgeben, der '$ this-> username' zurückgibt. Ohne diese würde es die Benutzernamen nicht in der Dropdown-Liste anzeigen –
Haben Sie versucht, ''Choice_label' => 'Benutzername' im Formular Builder-Optionen-Array hinzuzufügen? –