雄辩的关系:从根模型访问所有子孙资源

克里斯·尤利奥特(Chris Ullyott)

在我的Laravel应用程序中,我Users可以拥有很多Accounts在这些帐户中,有孙子模型,例如Videos在我的路由方案中,我想要一个索引路由,该路由列出与用户相关的所有帐户的所有视频。

为此,除非我弄错了,否则似乎没有必要user_idvideos桌子上放一个我相信Eloquent应该能够遍历这种关系,并获得与用户相关的所有帐户的所有视频。最终,这使用了FormRequest,在我的VideoController中,它看起来像:

public function index(VideoIndexRequest $request)
{
    return VideoResource::collection($request->user()->videos()->orderByDesc('id')->paginate(15));
}

在用户模型上,我尝试添加如下关系方法:

public function accounts()
{
    return $this->hasMany(Account::class);
}

public function videos()
{
    return $this->accounts()->with('videos');
}

...但是我通过API返回的是一个具有null值(无数据)的Video对象。相反,以下是在我的用户模型中有效的方法(基本上是说:“获取其帐户ID在此数组中的所有视频”)。

public function accounts()
{
    return $this->hasMany(Account::class);
}

public function videos()
{
    return Video::whereIn('account_id', $this->accounts()->pluck('id')->toArray());
}

...但这似乎并不优雅。我这样做对吗?

用户hasManyaccounts帐户hasMany videos
要实现所有视频用户模式,可以定义hasManyThrough()的关系:

public function videos()
{
   return $this->hasManyThrough(
       'App\Video', // Videos model
       'App\Account', // Account model
       'user_id', // Foreign key on accounts table...
       'account_id', // Foreign key on videos table...
       'id', // Local key on users table...
       'id' // Local key on accounts table...
   );
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章