私はメッセージングアプリを作成しています。特定のユーザーリストを持つ会話が既に存在するかどうかを確認する必要があります。会話 Laravelはアレイ内のユーザーがどこにいるかを問い合わせます
ユーザーの所有者 - <をUSER_ID
- ID:を
会話:
class Conversation{ public function users(){ return $this->belongsToMany('App\User'); } public function messages(){ return $this->hasMany('App\Message'); } }
私はこれらのテーブルを持っている:私は、このモデルを持っています
- ID
- メール
- パスワード
conversation_user:
- ID
- がconversation_id
- のuser_id
私はこのようなポスト要求を作りたい:
{ "users": [1,4,6], <- user ids "message": "Some message" }
会話はすでにすべてとユーザのみ1,4,6で存在する場合、メッセージがで重複する会話を避けるために、その会話に追加する必要がありますデータベース。さもなければ、私は指定されたユーザーと新しい会話を行います。 これは私がこれまでに行うことができた最高です:
$existing_conversation = $user->conversations()->whereHas('users', function($query) use ($data){ $query->whereIn('user_id', $data['users']); } )->has('users', '=', count($data['users']));
しかし、それは単にユーザーの配列にあったユーザーの量を正確に持って会話を返します。それは内側のクエリを無視します..
これについて誰かが考えていますか? :)
(存在する場合)、ユーザーの既存の会話を得るためにあなたのコントローラで次のように使用することができますザ・
のようなあなたのコントローラ内のいくつかのヘルパーメソッドを追加することができます。それは何の違いもありませんでした:( – Bisgaard
提供されているコードからはっきりしていませんが、会話とユーザーモデルはピボットテーブルを介して多対多の関係を共有しているようです。会話?あなたの現在のコード構造を理解するためのテーブルとモデルの詳細をユーザと会話の形で提供してください。 – Donkarnash
ちょっと@Donkarnash。 あなたはリジッドです。テーブル構造を含めるように質問を編集しました。 conversation_userはピボットテーブルです。 – Bisgaard