2017-03-27 6 views
0

Ich arbeite derzeit an einem PHP (Laravel) Projekt, wo wir MongoDB (das Paket jenssegers) verwenden. Ich habe das Kennwort auf die folgende Struktur setzt auf:Durch eingebettete Sammlungen in MongoDB suchen

{ 
    "_id" : ObjectId("58d56135b462e816642abbd1"), 
    "email" : "[email protected]", 
    "updated_at" : ISODate("2017-03-26T20:46:14.074Z"), 
    "created_at" : ISODate("2017-03-24T18:11:01.040Z"), 
    "passwordReset" : [ 
     { 
      "token" : "59b4b694e9ddcd9b44b0374eac595b28", 
      "updated_at" : ISODate("2017-03-24T18:11:05.017Z"), 
      "created_at" : ISODate("2017-03-24T18:11:05.017Z"), 
      "_id" : ObjectId("58d56139b462e816642abbd4") 
     } 
    ] 
} 

jedoch mehrere Benutzer können mehrere passwordReset ‚s haben. Also, wenn ich für Token gesucht werden soll, würde Ich mag nur in der Lage sein, durch alle Resets zu suchen, anstatt dies zu tun:

$users = User::all(); 
    $activeReset = null; 
    foreach ($users as $user) { 
     if (! is_null($user->passwordReset)) { 
      foreach ($user->passwordReset as $reset) { 
       if ($reset->token == $this->route('token')) { 
        $activeReset = $reset; 
       } 
      } 
     } 
    } 

Es ist eine Arbeitslösung, aber es ist nicht die schönste, auch, wenn die App geht in Produktion, dies wird enorme Ladezeiten verursachen, was nicht das ist, wonach ich suche.

Wenn Sie jedoch alle Resets über PasswordReset::all(); abrufen, wird ein leeres Array angezeigt.

Also, gibt es eine Möglichkeit, dies zu tun, ohne durch alle Benutzer gehen? Durch Laravel selbst oder vielleicht durch "rohes" PHP?

Danke.

+0

Bitte aktualisieren Sie die Frage mit Modellbeziehungen Definition. –

Antwort

1

Sie können alle Benutzer, die mindestens 1 Treffer Token haben, wenn Sie EmbedsMany Beziehung verwenden:

User::where('passwordReset', 'elemMatch', array('token' => $this->route('token'))); 
+0

Dies gibt null für mich zurück. Funktioniert es nur auf EmbedsMany? –

+0

Ja, die Abfrage in der Antwort funktioniert mit eingebetteten Dokumenten, was eine faire Annahme war, basierend auf der Dokumentstruktur in der Frage. Wenn Sie eine andere Art von Beziehungen verwenden, aktualisieren Sie die Frage bitte mit relevanten Informationen. Fragen wie "* Dies liefert null für mich. *" Benötigen auch [mcve] (https://stackoverflow.com/help/mcve). –

Verwandte Themen