具有与父级相关的对应表的Laravel多级关系

具有与父级相关的对应表的Laravel多级关系,laravel,Laravel,如果标题令人困惑,我深表歉意,但让我试着澄清一下。 我有一个学生表,后面是一个过程表,它有一个过程任务子表。然后,我想对每个学生,每个过程都有一个相应的记录,同样地,每个过程任务都有一个相应的记录 例如: 这样我就可以为每个学生设置“待办事项列表”(流程及其相关任务),每个列表都有各自的状态 (简化)表格 protected $fillable = [ 'process' ]; public function tasks() { return $this->hasMany

如果标题令人困惑,我深表歉意,但让我试着澄清一下。 我有一个学生表,后面是一个过程表,它有一个过程任务子表。然后,我想对每个学生,每个过程都有一个相应的记录,同样地,每个过程任务都有一个相应的记录

例如:

这样我就可以为每个学生设置“待办事项列表”(流程及其相关任务),每个列表都有各自的状态

(简化)表格

protected $fillable = [
    'process'
];

public function tasks() {
    return $this->hasMany('App\ProcessTask');
}
模型/关系

protected $fillable = [
    'process'
];

public function tasks() {
    return $this->hasMany('App\ProcessTask');
}
过程

protected $fillable = [
    'process'
];

public function tasks() {
    return $this->hasMany('App\ProcessTask');
}
处理任务

protected $fillable = [
    'process_id',
    'process_task',
    'sequence'
];
学生

protected $fillable = [
    'id','student_name','student_surname'
];

public function processes() {
    return $this->belongsToMany('App\Process')->withTimestamps();
}

public function tasks() {
    return $this->processes()->belongsToMany('App\ProcessTask')->withTimestamps();
}
//编辑:添加了进一步的代码进行澄清

控制器:

public function show($id)
{
    $student = Student::with(['processes','processes.tasks'])->findOrFail($id);
    return view('students.show', compact('student'));
}
视图:

@foreach($student->作为$student\u进程处理)
@foreach($student\u process->tasks->sortBy('sequence')作为$student\u process\u task)
@endforeach
@endforeach

我觉得我的人际关系出了问题?我如何获得流程,以及特定学生的相关任务?

因此,学生和流程之间存在多对多关系,但流程和任务之间存在一对多关系。但您也有一个用于流程任务关系的透视表。我很困惑。首先,确保添加反向关系,因为我看不到任何反向关系。如果流程任务是多对多的,则更改有多对多。长话短说,请仔细检查您是否正确构建了所有关系。然后转到StudentController.php并

public function index()
{
  return Student::with("processes.tasks")->get();
}

有关详细信息,请在此页面中搜索“嵌套急切加载”。

流程有许多任务-如示例所示。这就是“待办事项清单”本身,那么每个学生都有一份此类流程/任务的“副本”。例如:我需要查找“学生ABC”,查看他在“流程1:进入学生流程”中的
状态是什么,以及在“流程任务:输入他的姓名”中的
完成值是什么。为了澄清,流程任务“属于”流程(因为它将只属于单个流程)。我的错误。通过查看其名称,我认为“process_task”是一个数据透视表(肌肉记忆)。但我的回答的其他部分应该是正确的。因此,定义反向关系并更新索引函数。但这并没有起到作用,因为引用
@foreach($student->processes as$student\u process)
引用的是
process\u student
透视表(正确)。但是,
@foreach($student\u process->tasks->sortBy('sequence')作为$student\u process\u task)
引用的是
tasks
表,而不是“process\u task\u student”透视表?学生和任务之间不需要任何直接关系,因此“process\u task\u student”透视表。学生模型和过程模型具有多对多关系。流程和任务模型具有一对多关系。这意味着您可以从学生控制器通过流程访问任务。有很多方法可以做到这一点。很抱歉,我没有遵循-也许你可以更新你的答案,以反映你的意思,并显示事物的控制器端,并在视图中显示用例?
public function index()
{
  return Student::with("processes.tasks")->get();
}