首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel中的用户跟踪/订阅关系模型

Laravel中的用户跟踪/订阅关系模型
EN

Stack Overflow用户
提问于 2015-07-13 19:39:54
回答 2查看 2K关注 0票数 0

我正在尝试为我的应用程序创建一个youtube风格的订阅模型。到目前为止,我已经取得了少量的成功,因为您可以跟踪其他用户,并且在数据库中存储跟踪的用户。但是,我在检索当前用户所跟踪的人员列表时遇到了问题。

数据库:

用户表(id、first_name、last_name、电子邮件、密码、令牌、时间戳)

订阅表(id、user_id、subscriber_id、时间戳)

用户模型:

代码语言:javascript
复制
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();
}

我使用这段代码检索所有当前用户订阅(也就是他们正在跟踪的用户)。

代码语言:javascript
复制
 $subscriber = Auth::user()->id;


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


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

 return $userids;

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

SQL查询:

代码语言:javascript
复制
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。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-13 19:57:50

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

我会暂时保留这个问题,以防有人有明确的答案。

票数 1
EN

Stack Overflow用户

发布于 2017-02-17 00:50:02

Laravel 5.3雄辩的关系

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

代码语言:javascript
复制
return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');

其中“role_user”作为关系表的支点( relationship )表,'user_id'是关系表中的外键,是用户模型中的主键,而role_id是关系表中的外键和角色模型中的主键。

所以当你尝试这样做时:

代码语言:javascript
复制
public function subscriptions()
{
 return $this->belongsToMany('App\User', 'subscriptions', 'user_id',     
 'subscriber_id')->withTimestamps();
}

实际上,您正在将'subscriber_id'作为关系表中的外键和订阅服务器的主键。由于函数试图获取订阅,到达订阅者id将无法完成工作。这就是为什么当你改变它们的时候,它们是有效的。

结果应该如下所示:

代码语言:javascript
复制
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();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31392009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档