Laravel中的用户关注系统

时间:2015-04-16 15:52:59

标签: php mysql laravel eloquent laravel-5

我正在学习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,但只返回[])

我在某处出错还是错过了什么?

2 个答案:

答案 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');