Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Laravel 5.2:订阅的雄辩关系_Php_Laravel_Eloquent_Relationship - Fatal编程技术网

PHP Laravel 5.2:订阅的雄辩关系

PHP Laravel 5.2:订阅的雄辩关系,php,laravel,eloquent,relationship,Php,Laravel,Eloquent,Relationship,我想我有点卡住了,我只是需要有人来澄清一下。因此,我得到的是一个用户系统,其中包括订阅用户“订阅”他们的内容(正如你已经从FB、Twitter、YT等网站了解到的) 我的数据库模型如下所示: Users id username Subsccriptions id user_id sub_id 目前我有一个用户模型和一个订阅模型。来自用户的模型: public function subscriptions() { return $this->hasMany('App\Subscr

我想我有点卡住了,我只是需要有人来澄清一下。因此,我得到的是一个用户系统,其中包括订阅用户“订阅”他们的内容(正如你已经从FB、Twitter、YT等网站了解到的)

我的数据库模型如下所示:

Users
id
username

Subsccriptions
id
user_id
sub_id
目前我有一个用户模型和一个订阅模型。来自用户的模型:

public function subscriptions()
{
    return $this->hasMany('App\Subscription');
}
相比之下,我的订阅对象:

public function user()
{
    return $this->belongsTo('App\User');
}
因此,在我个人看来,这是一种1:多的关系。如果我用user->subscriptions()->get()调用user对象,我可以得到订阅及其子id,这样我就知道当前用户订阅了谁

人们告诉我的恰恰相反,这应该是一种多对多的关系。我做错什么了吗?我是否可以通过Eloquent中的关系自动将sub_id转换为用户

//编辑: 以下是为用户接收我的订户的当前代码

public function index()
{
    $subs = Auth::user()->subscriptions()->get()->all();

    $submodels = [];
    foreach($subs as $sub) {
        array_push($submodels,User::find($sub->sub_id));
    }

    return view('home', [
        'subscriptions' => $submodels
    ]);
}

}

嘿,布雷特,谢谢你的快速回答。我不确定是我误解了你的解决方法还是你误解了这个问题,所以我想澄清一下:目前我有两个用户id。一个用于我的用户,另一个用于其他用户。如果我删除user_id密钥,我将无法从当前所选用户的users对象访问它。因此,我确实使用此代码来启动并运行订阅帐户。是这样吗?我已经编辑了底部的代码,向您展示了为我的视图检索当前订阅id的代码!正如其他人所建议的,你的关系应该是多对多的。事实上,用于订阅的表用于透视表。您需要另一个表来保存订阅信息(无论您引用的内容是什么)。将本文档中的“角色”一词改为“订阅”,这就是您要查找的内容。希望有帮助:)嘿,可以,谢谢你的回答。但是,如果它看起来像这样正确,为什么它应该是多对多呢?如果这听起来很疯狂,我很抱歉,但出于某种原因,我不明白为什么:/你在问题中提到了“一个用户系统,它包括订阅,供人们“订阅”他们的内容”。你所说的内容到底是什么意思?如果这些内容由不同的用户共享,则不希望为具有相同订阅内容的每个用户创建数据库记录。而是创建一个多用户可以共享的订阅。在当前关系中,一个用户可以有多个订阅,但一个订阅只能属于一个用户。如果这是您预期的行为,那么您当前的设置就可以了。您当前的设置与laravel文档中的Post>Comments示例完全相同。嘿,Brett,谢谢您的快速回答。我不确定是我误解了你的解决方法还是你误解了这个问题,所以我想澄清一下:目前我有两个用户id。一个用于我的用户,另一个用于其他用户。如果我删除user_id密钥,我将无法从当前所选用户的users对象访问它。因此,我确实使用此代码来启动并运行订阅帐户。是这样吗?我已经编辑了底部的代码,向您展示了为我的视图检索当前订阅id的代码!正如其他人所建议的,你的关系应该是多对多的。事实上,用于订阅的表用于透视表。您需要另一个表来保存订阅信息(无论您引用的内容是什么)。将本文档中的“角色”一词改为“订阅”,这就是您要查找的内容。希望有帮助:)嘿,可以,谢谢你的回答。但是,如果它看起来像这样正确,为什么它应该是多对多呢?如果这听起来很疯狂,我很抱歉,但出于某种原因,我不明白为什么:/你在问题中提到了“一个用户系统,它包括订阅,供人们“订阅”他们的内容”。你所说的内容到底是什么意思?如果这些内容由不同的用户共享,则不希望为具有相同订阅内容的每个用户创建数据库记录。而是创建一个多用户可以共享的订阅。在当前关系中,一个用户可以有多个订阅,但一个订阅只能属于一个用户。如果这是您预期的行为,那么您当前的设置就可以了。您当前的设置与laravel文档中的Post>Comments示例相同。