Laravel中的用户关注/订阅关系模型


User Follow/Subscription Relationship Model In Laravel

我正在尝试为我的应用程序创建一个youtube风格的订阅模型。到目前为止,我已经取得了一些成功,那就是你可以关注其他用户,它会在数据库中存储谁在关注谁。但是,我在检索当前用户正在关注的人的列表时遇到了问题。

数据库:

users table (id, first_name, last_name, email, password, token, timestamp)

subscriptions表(id, user_id, subscriber_id,时间戳)

用户模式:

public function subscriptions()
{
 return $this->belongsToMany('App'User', 'subscriptions', 'user_id',     
 'subscriber_id')->withTimestamps();
}
public function subscribers()
{
return $this->belongsToMany('App'User', 'subscriptions', 'subscriber_id', 
'user_id')->withTimestamps();
}

我使用这段代码来检索所有当前用户的订阅(也就是他们在关注谁)

 $subscriber = Auth::user()->id;

 $user = User::find($subscriber);

 $userids = $user->subscriptions->lists('user_id');
 return $userids;

现在,这段代码当前返回一个空值。经过进一步调查,这是有意义的,因为正在运行的查询是不正确的

SQL查询:

select `user_id` from `users` inner join `subscriptions` on `users`.`id` = `subscriptions`.`subscriber_id` where `subscriptions`.`user_id` = 14

我当前的设置正在尝试寻找错误的东西。

如果用户1跟随用户2、3和4,那么我的代码应该返回2、3和4。

有人可以帮助纠正我的关系设置或我正在运行的代码吗?它应该根据当前用户subscriber_ID在订阅表中查找user_id。

Laravel 5.3雄辩的关系

如果您检查多对多关系部分末尾的代码,您将看到这行代码。

return $this->belongsToMany('App'Role', 'role_user', 'user_id', 'role_id');

这里,我们有'role_user'作为pivot(关系)表,'user_id'是关系表中的外键和用户模型中的主键,'role_id'是关系表中的外键和角色模型中的主键。

所以当你尝试这样做的时候:

public function subscriptions()
{
 return $this->belongsToMany('App'User', 'subscriptions', 'user_id',     
 'subscriber_id')->withTimestamps();
}

您实际上将'subscriber_id'作为关系表中的外键主键用于订阅者。由于该函数正在尝试获取订阅,因此无法访问订阅者id。这就是为什么当你改变它们时,它们可以工作。

结果应该是这样的:

public function subscribers()
{
 return $this->belongsToMany('App'User', 'subscriptions', 'user_id',     
 'subscriber_id')->withTimestamps();
}
public function subscriptions()
{
return $this->belongsToMany('App'User', 'subscriptions', 'subscriber_id', 
'user_id')->withTimestamps();
}

所以出于纯粹的机会,我交换了订阅者()和订阅()的关系,现在它返回正确的数据。我不明白为什么,但它肯定是返回我所期望的ID。

我先不提这个问题,以防有人有明确的答案。