php - Laravel Eloquent - 获取多关系的多关系
问题描述
假设以下结构:
Auser
有很多projects
。Aproject
有很多tasks
。
目标:我想得到tasks
一个确定的$user
。实现这一目标的最优雅的方法是什么?
我目前使用的是一个大的、非直观的函数链,它返回一个集合而不是一个集合构建器实例:
return $user->projects()->with('tasks')->get()->pluck('tasks')->flatten();
这就是关系的样子:
class User extends \Illuminate\Database\Eloquent\Model {
public function projects(){
return $this->hasMany(Project::class);
}
}
class Project extends \Illuminate\Database\Eloquent\Model {
public function tasks(){
return $this->hasMany(Task::class);
}
}
解决方案
Has Many Through关系理解为访问另一种模式关系的数据提供快捷方式有点复杂。
在您的用户模型中,像这样建立关系:
public function tasks()
{
return $this->hasManyThrough(
Task::class,
Project::class,
'user_id', // Foreign key on projects table...
'project_id', // Foreign key on tasks table...
'id', // Local key on users table...
'id' // Local key on projects table...
);
}
推荐阅读
- git - Docker 使用经过身份验证的 git 调用
- r - 在 R(插入符号)中重新运行 preProcess()、predict() 和 train() 时模型精度不同
- serenity-bdd - 如何使用 Get.resource("path") REST API,将 Serenity Screenplay 与 HTTPS 验证作为 Actor
- javascript - Angular Material Autocomplete - 如何选择选项
- svelte - 为什么我不能在 svelte3 的脚本标签中访问“$:”又名反应变量?
- python-3.x - 打印语句在函数中工作但不在代码主体中
- image - 如何使用 micropython 语言将图像发送到 API
- python - 如何使用python在多处理中动态更改参数到进程
- session - 在 maxscale 上的 mariadb 中显示详细的进程列表
- database - 这是 Database System Concepts 6th edition-Figure 11.11 Querying a B+-tree.-procedure printAll(value V) 中的错误吗?