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

Php Laravel中的用户跟踪/订阅关系模型,php,laravel,orm,eloquent,laravel-5,Php,Laravel,Orm,Eloquent,Laravel 5,我正在尝试为我的应用程序创建一个youtube风格的订阅模型。到目前为止,我已经取得了少量的成功,即您可以跟踪其他用户,并且它会在数据库中存储跟踪谁的用户。但是,检索当前用户正在跟踪的人员列表时遇到问题 数据库: 用户表(id、名字、姓氏、电子邮件、密码、令牌、时间戳) 订阅表(id、用户id、订户id、时间戳) 用户模型: public function subscriptions() { return $this->belongsToMany('App\User', 'subscri

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

数据库:

用户表(id、名字、姓氏、电子邮件、密码、令牌、时间戳)

订阅表(id、用户id、订户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();
}
我正在使用此代码检索所有当前用户订阅(即他们正在跟踪的用户)

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

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


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

因此,纯粹出于偶然,我交换了订户()和订户()之间的关系,现在它返回了正确的数据。。我不明白为什么,但它肯定会返回我期待的ID


我将暂时保留这个问题,以防有明确解决方案的人回答。

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

我暂时不回答这个问题,以防有明确答案的人回答。

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

return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
在这里,我们使用“角色用户”作为轴心(关系)表,'user\u id'是关系表中的外键和用户模型中的主键,而“角色id”是关系表中的外键和角色模型中的主键

因此,当您尝试这样做时:

公共函数订阅()
{
返回$this->belongTomany('App\User','subscriptions','User\u id',
“订户id”)->带时间戳();
}
实际上,您将'subscriber\u id'作为关系表中的外键,并将主键作为订户。由于函数正在尝试获取订阅,因此访问订阅服务器id将无法完成此工作。这就是为什么当你改变它们时,它们会起作用

结果应该如下所示:

公共功能订户()
{
返回$this->belongTomany('App\User','subscriptions','User\u id',
“订户id”)->带时间戳();
}
公共功能订阅()
{
返回$this->belongTomany('App\User','subscriptions','subscriber\u id',
'user_id')->带时间戳();
}

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

return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
在这里,我们使用“角色用户”作为轴心(关系)表,'user\u id'是关系表中的外键和用户模型中的主键,而“角色id”是关系表中的外键和角色模型中的主键

因此,当您尝试这样做时:

公共函数订阅()
{
返回$this->belongTomany('App\User','subscriptions','User\u id',
“订户id”)->带时间戳();
}
实际上,您将'subscriber\u id'作为关系表中的外键,并将主键作为订户。由于函数正在尝试获取订阅,因此访问订阅服务器id将无法完成此工作。这就是为什么当你改变它们时,它们会起作用

结果应该如下所示:

公共功能订户()
{
返回$this->belongTomany('App\User','subscriptions','User\u id',
“订户id”)->带时间戳();
}
公共功能订阅()
{
返回$this->belongTomany('App\User','subscriptions','subscriber\u id',
'user_id')->带时间戳();
}