在我的Laravel应用程序中,我Users
可以拥有很多Accounts
。在这些帐户中,有孙子模型,例如Videos
。在我的路由方案中,我想要一个索引路由,该路由列出与用户相关的所有帐户的所有视频。
为此,除非我弄错了,否则似乎没有必要user_id
在videos
桌子上放一个。我相信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] 删除。
我来说两句