我正在学习laravel atm并试图实现一个Twitter风格的关注者提要。 到目前为止,我有以下
标准用户表(id,用户名等)
包含user_id,subscriber_id,timestamps
的订阅(aka粉丝)表我的用户模型包含以下关系
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();
}

我现在正在尝试加载用户订阅列表 即。用户14跟随用户15
$subscriber = Auth::user()->id;
$user = User::find($subscriber);
$userids = $user->subscriptions->lists('user_id');
return $userids;

我使用此代码获取当前登录用户并查找其订阅。 $ userids应返回当前登录用户订阅的ID列表。但是,尽管DB中存在记录,但它只生成一个空数组。 (它应该返回15,但只返回[])
我在某处出错还是错过了什么?
答案 0 :(得分:1)
使用以下方式获取当前用户的订阅者:
$subscribers = Auth::user()->subscribers;
您可以将订阅者发送到任何视图并使用
@foreach ($subscribers as subscriber)
{{ $subscriber->name }}
@endforeach
答案 1 :(得分:0)
使用lists
方法调用,您要求从user_id
方法调用的结果中返回subscriptions
列。但是,subscriptions
调用返回一个关系对象,该对象提供来自users表而不是数据透视表subscriptions
的结果。 user_id
列仅在数据透视表上找到,而不在users
表中找到。这就是为什么你得到空洞的结果。这里我得到一个NULL
值的数组。
试试:$userids = $user->subscriptions->lists('id');