【问题标题】:User Following System in LaravelLaravel 中的用户关注系统
【发布时间】:2015-06-23 04:00:56
【问题描述】:

我正在学习 laravel atm 并尝试实现一个 twitter 风格的追随者提要。 到目前为止,我有以下内容

标准用户表(id、用户名等)

包含 user_id、subscriber_id、时间戳的订阅(也称为关注者)表

My User 模型包含以下关系

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();
}

我现在正在尝试加载用户订阅列表 IE。用户 14 关注用户 15

$subscriber = Auth::user()->id;
    
        
        $user = User::find($subscriber);
        
        
        $userids = $user->subscriptions->lists('user_id');

        return $userids;

我使用此代码获取当前登录的用户并找到他们的订阅。 $userids 应该返回当前登录用户订阅的 ID 列表。然而,尽管数据库中存在记录,它只会产生一个空数组。 (它应该返回 15,但只返回 [] )

我是在哪里出错了还是错过了什么?

【问题讨论】:

    标签: php mysql laravel eloquent laravel-5


    【解决方案1】:

    获取当前用户的订阅者使用:

    $subscribers = Auth::user()->subscribers;
    

    您可以将订阅者发送到任何视图并使用

    @foreach ($subscribers as subscriber)
       {{ $subscriber->name }}
    @endforeach
    

    【讨论】:

      【解决方案2】:

      使用lists 方法调用,您要求从subscriptions 方法调用的结果中返回user_id 列。然而,subscriptions 调用返回一个关系对象,该对象从用户表而不是数据透视表 subscriptions 中给出结果。 user_id 列只能在数据透视表上找到,而不能在 users 表上找到。这就是为什么你得到空的结果。在这里,我得到一个带有 NULL 值的数组。 试试看:$userids = $user->subscriptions->lists('id');

      【讨论】:

      • 您好,很抱歉回复晚了。返回结果仍然为空。我的用户模型关系看起来还好吗,这让我感到困惑,因为它在我的脑海中是有道理的!
      • 你试过用subscribers代替subscriptions吗?您的关系可能与您的预期相反。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多