habe ich eine Firma Klasse, die Benutzer verweist:Erhalten Array von referenzierten ids in Lehre ODM
/**
* @MongoDB\Document()
*/
class Company {
/* ... */
/**
* @MongoDB\ReferenceMany(targetDocument="Topboard\UserBundle\Document\User", inversedBy="companies")
*/
protected $users;
}
In meinem Controller muss ich überprüfen, ob der Verweis auf den Benutzer im Unternehmen vorhanden ist, und halten nur den Verweis auf dieser Benutzer, nicht andere Referenzen. Ich möchte auch mehrere Datenbankanforderungen für Benutzer vermeiden. Ich möchte nur überprüfen, ob die ID der Referenzen $currentUserId
entspricht.
public function getCompanyAction($companyId, $currentUserId) {
$dm = $this->get('doctrine_mongodb')->getManager();
$company = $dm->getRepository('TopboardAppBundle:Company')->findOneById($companyId);
foreach ($company->getUsers() as $user) {
// Foreach will query each user separetly. This is not what I need.
// I need somehow access array of references' ids
// and compare them with the $currentUserId
if($user->getId() !== $currentUserId){
// Remove reference
}
}
return $company;
}
Proxy klingt ungefähr richtig. Also schlagen Sie vor, den ID-Getter in der User-Klasse zu ändern? Ich denke, das Problem ist, dass wenn ich 'foreach', es bereits eine DB-Anfrage auslöst. – Websirnik
Nein, Ihr Getter sollte intakt bleiben, Sie können die automatisch generierte Proxy-Klasse überprüfen (sie befinden sich normalerweise in 'app/cache/lcl/doctrine/odm/mongodb/Proxies /'). Wie für 'foreach' sollte es keine Abfrage alleine auslösen, da Ihre Referenz die Besitzerseite ist, die somit nach dem ersten Holen bereits im Dokument verfügbar ist. – malarzm
Was ich meine ist, ist Ihr Code sieht korrekt aus und sollte keine zusätzlichen Abfragen an dieser Stelle auslösen – malarzm