Ich habe ein Messaging-System für ein Projekt erstellt, an dem ich arbeite und scheinen ein bisschen ein Stolperstein getroffen zu haben.Laravel Eloquent Abfragen Beziehungen
Ich habe die folgende Tabellenstrukturen (irrelevent Spalten der Übersichtlichkeit halber weggelassen)
messages
-------------------------
from_id to_id spam
users
-------------------------
id group_id
groups
-------------------------
id access_level
die Zugriffsebene verwendet, um Berechtigungen bitweise
001 read
010 write
100 delete
so lesen und zu schreiben, würde der Zugriffsebene sein ‚3 '
Benutzer können Berechtigungen vom Websiteadministrator widerrufen haben, also versuche ich, Nachrichten auszuwählen, die an Benutzer gesendet wurden, bei denen der Absender noch vorhanden ist Hat Schreibrechte.
meine Modelle sind in Benutzer als solche (wieder nur relevante Teile gezeigt)
class User extends Eloquent {
public function group() {
return $this->belongsTo('Group');
}
}
class Message extends Eloquent {
public function to() {
return $this->belongsTo('User', 'to_id');
}
public function from() {
return $this->belongsTo('User', 'from_id');
}
}
ich versucht habe, die folgende
Message::with(['from' => function($query)
{
$query->with(['group' => function($_query)
{
$_query->where('access_level', '&', 2);
}]);
}])
->where('to_id', Auth::user()->id)
->get();
Diese bekommt die Nachrichten an den aktuell angemeldeten geschickt, wo die Einrichtung Die Zugriffsebene der Absendergruppe ermöglicht dem Benutzer weiterhin das Schreiben von Nachrichten (theoretisch), wobei jedoch einfach alle an den Benutzer gesendeten Nachrichten zurückgegeben werden.
I auch versucht haben Targeting spezifisch für die Gruppe (Gruppen 6 und 7 gesperrt werden und unbestätigte Konten):
Message::with(['from' => function($query)
{
$query->whereNotIn('group_id', [6,7])
}])
->where('to_id', Auth::user()->id)
->get();
die auch alle Nachrichten an den Benutzer zurückgibt.
tl;dr
Wie Eloquent verwenden, würde ich alle Nachrichten auswählen, um einen Benutzer gesendet, wo der Absender Gruppe Schreibrechte hat?
edit
Natürlich ::with
werden die Nachrichten nicht beeinflussen, die gezogen bekommen, da es nur ein träges Laden von verknüpften Tabellen der Fall ist.
Das Problem ist, dass nicht nur Leute in Gruppe 2 in der Lage sind, Nachrichten zu schreiben, also musste ich prüfen, ob die Benutzergruppenberechtigungen die Berechtigung 'write' enthielten und auch' :: with' keinen Einfluss auf die Hauptmodell, nur das eifrig (ly) -geladene Modell. –