2

我有两个表:用户和关注者。

用户

id,用户名
1,foo
2,bar
3,测试

追随者

id, user_id_follows, user_id_followed
1, 2, 1
2, 3, 1

这意味着用户“bar”和“test”跟随用户“foo”。

我想要一个结果集,例如:
[
id:“foo”,
用户名:“bar”,
关注者:[“bar”,“test”]
]

或者作为 JSON 对象。雄辩的 ORM 可以做到这一点吗?用户与追随者和追随者属于用户有一个hasMany-relationship。是否可以获得关系,但只能获得关注者的用户名?我也尝试通过 raw-sql 查询来做到这一点。但是使用 DB::select(DB::raw($query)); 给我一个非多维对象,这意味着“追随者”只有“酒吧”,而不是两个追随者。

那么获得多维结果集的最佳方法是什么?我还能依靠 eloquentORM 吗?如何?

谢谢你和最好的问候
菲尔

4

1 回答 1

2

找到了更好的方法。我们要做的是创建与用户表到用户表的多对多关系,并将您的关注者表用作数据透视表。我还做了一些额外的工作,以便您可以查看用户的关注者和关注者。

不幸的是,你设置表格的方式对我来说没有多大意义,所以我的关注者表格看起来像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 回答