2

ユーザーとフォロワーの2つのテーブルがあります。

ユーザー

ID、ユーザー名
1、foo
2、バー
3、テスト

フォロワー

ID、user_id_follows、user_id_followed
1、2、1
2、3、1

これは、ユーザー「bar」と「test」がユーザー「foo」をフォローしていることを意味します。

次のような結果セットが必要です:
[
id: "foo",
username: "bar",
follower: ["bar", "test"]
]

または、JSON オブジェクトとして。これは雄弁なORMで可能ですか? ユーザーはフォロワーに対して hasMany 関係を持ち、フォロワーはユーザーに属しています。関係を取得することは可能ですが、フォロワーのユーザー名のみを取得できますか? また、raw-sqlクエリを介してこれを実行しようとしました。ただし、DB::select(DB::raw($query)); を使用します。非多次元オブジェクトを取得します。つまり、「フォロワー」には「バー」のみがあり、両方のフォロワーはありません。

では、多次元の結果セットを取得する最良の方法は何ですか? まだ eloquentTORM に頼ることはできますか? どのように?

ありがとう、よろしく
フィル

4

1 に答える 1

2

はるかに良い方法を見つけました。users テーブルから users テーブルへの多対多の関係を作成し、フォロワー テーブルをピボット テーブルとして使用します。ユーザーのフォローとフォロワーの両方を表示できるように、追加の作業も行いました。

残念ながら、テーブルのセットアップ方法は私にはあまり意味がありませんでした。そのため、私のフォロワー テーブルはid, user_id, follow_id. このように、列でそのユーザーの ID を検索することで、ユーザーがフォローしているユーザーを簡単に見つけることができます。user_idまた、列で user_id を検索することで、そのユーザーが誰にフォローされているかを確認できfollow_idます。おそらく、これがテーブルで意図したものであり、その場合は、持っている列名をドロップするだけで済みます。それを念頭に置いて、ここに私がしたことがあります。

ユーザーモデルで。

public function followers()
{
    return $this->belongsToMany('User','followers','user_id_followed','user_id_follows');
}

public function followeds()
{
    return $this->belongsToMany('User','followers','user_id_follows','user_id_followed');
}

私のコントローラーで、jsonを取得するには....

$user = User::find(1);
$user->load('followers');
$user->load('followeds');
$json = $user->toJson();
echo $json;

明らかに、フォロワーだけが必要な場合は、$user->load('followers');

于 2013-10-04T17:50:39.290 に答える