Ich mache eine Messaging-App, und ich muss überprüfen, ob eine Konversation bereits existiert, die eine bestimmte Liste von Benutzern hat (nicht mehr und nicht weniger). Ich habe dieses Modell:Laravel bekommen Konversation, wo Benutzer in Array
class Conversation{
public function users(){
return $this->belongsToMany('App\User');
}
public function messages(){
return $this->hasMany('App\Message');
}
}
Ich habe diese Tabellen:
Gespräche:
- id
- < user_id - der Besitzer des Gesprächs
Benutzer:
- id
- Passwort
conversation_user:
- id
- conversation_id
- User_id
Ich möchte eine Post-Anforderung wie folgt machen:
{
"users": [1,4,6], <- user ids
"message": "Some message"
}
Wenn ein Gespräch bereits mit allen und nur Benutzer 1,4,6 vorhanden ist, sollte die Nachricht an diesem Gespräch hinzugefügt werden doppelte Gespräche in der zu vermeiden, Datenbank. Ansonsten werde ich eine neue Konversation mit den angegebenen Benutzern führen. Dies ist die beste ich in der Lage gewesen, so weit zu tun:
$existing_conversation = $user->conversations()->whereHas('users',
function($query) use ($data){
$query->whereIn('user_id', $data['users']);
}
)->has('users', '=', count($data['users']));
Aber es gibt nur die Gespräche, die genau die Menge an Benutzern, die in der Benutzer-Array war. Es ignoriert die innere Abfrage.
Hat jemand eine Idee dafür? :)
Hey @Donkarnash. Das hat keinen Unterschied gemacht :( – Bisgaard
Es ist unklar, aus dem Code zur Verfügung gestellt, es scheint, dass Conversation und User-Modelle Many-to-Many-Beziehung durch eine Pivot-Tabelle teilen. In diesem Fall, wie können Sie nach user_id auf überprüfen Gespräche?Bitte geben Sie die Tabelle und Modelldetails von Benutzer und Konversation an, um Ihre aktuelle Codestruktur zu verstehen. – Donkarnash
Hey @Donkarnash. Sie sind richtig. Ich habe die Frage bearbeitet, um die Tabellenstruktur einzuschließen. conversation_user ist eine Pivot-Tabelle. – Bisgaard