我正在尝试为我的应用程序创建一个youtube风格的订阅模型。到目前为止,我已经取得了少量的成功,因为您可以跟踪其他用户,并且在数据库中存储跟踪的用户。但是,我在检索当前用户所跟踪的人员列表时遇到了问题。
数据库:
用户表(id、first_name、last_name、电子邮件、密码、令牌、时间戳)
订阅表(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。
有人能帮忙纠正我的关系设置或者我正在运行的代码吗?它应该根据当前用户的user_id在订阅表中查找subscriber_ID。
发布于 2015-07-13 19:57:50
因此,出于纯粹的机会,我交换了订阅者()和订阅()关系,现在它返回正确的数据。我不明白为什么,但它肯定是返回了我期待的身份证。
我会暂时保留这个问题,以防有人有明确的答案。
发布于 2017-02-17 00:50:02
如果您检查多到多关系部分末尾的代码,您将看到这一行代码。
return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');其中“role_user”作为关系表的支点( relationship )表,'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();
}https://stackoverflow.com/questions/31392009
复制相似问题