私のプロジェクトには多対多の関係があります。 ユーザーbelongsToManyチャット そして チャットはbelongsToManyユーザーです。
だから、私はchat_idとuser_idを持つピボットテーブルchat_userを持っています。
1つのチャットに一部のユーザーを含めることもできます
その大丈夫とうまく動作します。
新しいチャットを作成するとき、2人のユーザーがいます。そして、私は確認したいのですが、彼らの間にはすでに一般的なチャットがあります。
このクエリにはいくつか問題があります。 また、chat_userテーブルでカスタムモデルを作成しようとしましたが、運がありません=( 誰かがそのような仕事をしたことがありますか?練習はありますか?ありがとうございました!
回答 2 件
最も簡単な方法は、おそらく1人のユーザーを取得して、もう1人のユーザーを探すことです。あなたの関係が正しいと仮定すると、このようなもの:
$firstUserChats = $firstUser->chats()->pluck('user_id'); $usersHaveACommonChat = $firstUserChats->contains($secondUser->id);
これを1行で実行する方法はありますが、通常はこれと同じくらい簡単です。 :)
関連記事
- Directus:同じコレクションに対して多対多の関係を適切に作成する方法
- 多対多の関係が特定の制限を超えないことを検証する適切な方法は何ですか?
- Doctrineの多対多の関係:データベースからデータを自動的に取得できませんでした
- TYPO3 DataHandlerを使用して多対多の関係フィールドの値を設定するのに好ましい形式は何ですか?
- go-pg ORMで多対多関係のキーを指定する
- コアデータ:多対多の関係で関連オブジェクトを取得する
- 多対多の関係RavenDb:ドキュメントの構造とインデックス
- Entity Framework Core:汎用オブジェクトテーブル間の多対多の関係
- Laravel多対多リレーションクエリ
1つの方法は、whereHas()クエリビルダーメソッドを使用することです。
ベストプラクティスとして、個人的には、そのようなものをクエリスコープとしてモデル(この場合はチャットモデル)に統合して、使いやすくします。
その後、次のように使用できます。
とても読みやすいと思います。