我的数据库中有3个表,结构如下:
'projects'
-> id
-> name
'tasklists'
-> id
-> project_id
'tasks'
-> id
-> project_id
-> tasklist_id
我为每张桌子制作了一个模型。
- Project.php
- Tasklist.php
- Task.php
我的目标是在我的视图中打印每个任务列表以及特定项目的所有任务。
例如:
Project name: Stackoverflow
-> Tasklist #1
-> Task #1
-> Task #2
-> Task #3
-> Tasklist #2
-> Task #4
-> Task #5
-> Tasklist #3
-> Task #6
我对Laravel中两个表之间的简单关系有一点了解。但是我不知道如何利用3个表之间的关系。
有人可以给我一些提示/提示吗?哪种关系类型最适合使用?我应该如何写出来,应该放在哪个模型中?我知道我内心的逻辑,但是我不知道如何用代码写出来。
编辑->这就是我现在所拥有的。
任务列表
public function projects()
{
return $this->belongsTo('App\Project');
}
public function tasks()
{
return $this->hasMany('App\Task', 'tasklist_id');
}
Task.php
public function tasks()
{
return $this->belongsTo('App\Tasklists');
}
项目模型
public function Tasklists()
{
return $this->hasManyThrough(
'App\Task',
'App\Tasklists',
'project_id',
'tasklist_id',
'id',
'id'
);
}
现在,当我打印dd(Project :: first()-> tasklists);
我从数据库中获得所有任务(未按project_id或tasklist_id排序)。 所以我想我离我更近了,但是还没有。
亲切的问候,
迪伦
答案 0 :(得分:0)
使用多对多关系 为此,您将创建3个表:
要了解更多信息,请阅读此官方文档https://laravel.com/docs/5.6/eloquent-relationships#many-to-many
答案 1 :(得分:0)
任务列表属于项目,项目有很多任务列表。
任务属于任务列表,任务列表有很多任务。
项目通过任务列表有很多任务。
这些描述应与Laravel所谓的关系方法保持一致。
答案 2 :(得分:0)
不需要hasManyThrough-您应该能够像这样使用现有的关系...
Project.php ...
function taskLists(){
return $this->hasMany('App\TaskList');
}
TaskList.php
function tasks(){
return $this->hasMany('App\Tasks');
}
然后在您的控制器中...
Projects::with('taskLists', 'taskLists.tasks')->get();
这将返回所有与任务列表相关的项目。然后在列表上,将任务作为与这些任务的关系。
要打印,您可以执行类似...
@foreach($projects as $project)
<h1>Project Name: {{$project->name}}</h1>
@foreach($project->taskLists as $list)
<h4>{{$list->name}}</h4>
<ul>
@foreach($list->tasks as $task)
<li>{{$task->name)</li>
@endforeach
</ul>
@endforeach
@endforeach