Okay, also bin ich ein bisschen fest. Ich habe ein Gruppensystem in meinem Projekt erstellt. Das Gruppensystem ist 5 Modelle:Laravel eloquent Suche nach Namen Beziehung
- Gruppe
- Gruppe
- Gruppenmitglied
- GroupPost
- GrouPostComment
Was ich versuche für die Mitglieder ist eine Suche zu tun, in eine Gruppe nach Eingabe des Benutzernamens. Aber ich speichere nur die user_id im GroupMember-Modell und nicht den Benutzernamen, der im User-Modell gespeichert ist. Ich habe noch keine Beziehungen zu Gruppen im Benutzermodell.
Gibt es irgendeine Art von Beziehung, die ich einfügen muss? Ich habe die Morph-Beziehung noch nicht verstanden.
Hier sind eine Liste der Beziehungen für die Gruppe einige der benötigten Modelle.
Gruppenmodell
public function category() {
return $this -> belongsTo('App\GroupCategory', 'category_id');
}
public function owner() {
return $this -> hasOne('App\GroupMember', 'group_id') -> where('owner', true);
}
public function mods() {
return $this -> hasMany('App\GroupMember', 'group_id') -> where('mod', true);
}
public function members() {
return $this -> hasMany('App\GroupMember', 'group_id');
}
public function posts() {
return $this -> hasMany('App\GroupPost', 'group_id');
}
public function comments() {
return $this -> hasMany('App\GroupPostComment', 'group_id');
}
Gruppenmitglied Modell
public function groups() {
return $this -> belongsToMany('App\Group');
}
public function posts() {
return $this -> hasMany('App\GroupPost');
}
public function comments() {
return $this -> hasMany('App\GroupPostComment');
}
public function user() {
return $this -> belongsTo('App\User');
}
Gerade clearify. Ich habe ein Eingabefeld, in das der Admin einen Buchstaben oder Teile des gesuchten Benutzernamens eingeben kann, dann führt er eine AJAX-Suche durch, bei der nur nach Mitgliedern in der Gruppe gesucht wird, aber nach Benutzername. Und der Benutzername befindet sich nicht im GroupMember-Modell, sondern im Benutzermodell.
Wie würde ich das tun?
Vielen Dank im Voraus.
Bearbeiten: Die Controller-Methode.
/**
* @param Group $group
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*
* Manage users
*/
public function getManageUsers(Group $group) {
$group = $group -> with('members.user');
// Usernames can be "test0", "test1", "test2"
// If i search "1" only "test1" should be in the result
$yourSearchQuery = '1';
// The query
$result = $group -> whereHas('members', function ($query) use ($yourSearchQuery) {
$query -> whereHas('user', function ($query) use ($yourSearchQuery) {
$query -> where('name', 'LIKE', '%'. $yourSearchQuery .'%');
});
}) -> get();
// Check the results manually
// It still returns all members of the group
dd($result);
}
Können Sie Ihre Controller-Methode für die Ajax-Anfrage zeigen? – Adam
Im Moment mache ich nur eine manuelle Suche mit 'dd ($ result)', nur um zu überprüfen, ob die Suche funktioniert. Ich habe den Code ausprobiert, den Odin Thunder gepostet hat. – Kaizokupuffball
Hinzugefügt die Controller-Methode, wie Sie sehen können. – Kaizokupuffball