【问题标题】:User Follow/Subscription Relationship Model In LaravelLaravel 中的用户关注/订阅关系模型
【发布时间】:2015-10-02 05:27:34
【问题描述】:

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

数据库:

用户表(id、first_name、last_name、email、密码、令牌、时间戳)

订阅表(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。

有人可以帮助纠正我的关系设置或我正在运行的代码吗?它应该根据当前用户的subscriber_ID 在订阅表中查找user_id。

【问题讨论】:

    标签: php laravel orm eloquent laravel-5


    【解决方案1】:

    Laravel 5.3 Eloquent Relationships

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

    return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
    

    在这里,我们将 'role_user' 作为主元(关系)表,'user_id'foreign关系表中的键用户模型中的主键'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();
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-03-15
        • 2014-04-06
        • 1970-01-01
        • 2015-06-23
        • 1970-01-01
        • 1970-01-01
        • 2016-08-08
        • 2020-04-02
        • 2019-04-04
        相关资源
        最近更新 更多