雄弁との友情関係をモデル化する最良の方法は何ですか? 私のテーブル スキーマは以下のとおりです。次のように、すべての友人を取得できる関係を 1 つ定義したいと思います。
<?php
class User extends Eloquent {
public function friends() {
return $this->belongsToMany('User', 'friendships', 'user_id', 'friend_id')->orWhere($this->id,'=', 'friend_id');
}
}
+----+---------+-----------+----------+---------------------+---------------------+
| id | user_id | friend_id | state | created_at | updated_at |
+----+---------+-----------+----------+---------------------+---------------------+
| 1 | 3 | 1 | accepted | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 2 | 2 | 3 | accepted | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+----+---------+-----------+----------+---------------------+---------------------+
上記の関係は、ユーザー ID が 3 の友達を探すときにほぼ機能します。ユーザー 1 と 3 を取得しますが、明らかに 1 と 2 が必要です。
フレンドシップテーブル
user_id: フレンドシップをリクエストしたユーザー ID
friend_id: 対象のフレンドのユーザー ID
状態: フレンドシップが保留中、承認済み、またはブロックされているかどうか。
created_at と updated_at
Laravel多対多の自己参照テーブルからの解決策があることを認識していますが、関係の両側から友人を取得できる1つの方法でしか機能しませんが、たとえば、ユーザー1と3が友人である場合、 1 つの行 user_id = 3 および friend_id = 1 で、次の行ではその逆です。(または、2 つの行がない場合は、2 つのクエリを実行する必要があります)。