Php Laravel 5-如何在3个表之间建立关系?

Php Laravel 5-如何在3个表之间建立关系?,php,laravel,eloquent,foreign-keys,relationship,Php,Laravel,Eloquent,Foreign Keys,Relationship,我的数据库中有3个表,结构如下: 'projects' -> id -> name 'tasklists' -> id -> project_id 'tasks' -> id -> project_id -> tasklist_id 我为每张桌子做了一个模型 - Project.php - Tasklist.php - Task.php 我的目标是在视图中打印每个任务列表以及特定项目的所有任务 例如: Project name: Stackove

我的数据库中有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()->任务列表)时

我从数据库中获取所有任务(不按项目id或任务列表id排序)。 所以我想我离这里更近了,但还没到那里

诸位,


迪伦使用多对多关系 为此,您将创建3个表:

  • 计划
  • 任务
  • 项目任务(这是包含关系信息的透视表)

  • 要了解更多信息,请阅读本官方文件。

    任务列表属于项目,项目有许多任务列表

    任务属于任务列表,任务列表有许多任务

    通过任务列表,项目有许多任务


    这些描述应该与Laravel所称的关系方法一致。

    不需要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
    
    @foreach($projects作为$project)
    项目名称:{{$Project->Name}
    @foreach($project->taskLists as$list)
    {{$list->name}
    
      @foreach($list->tasks as$task)
    • {{$task->name)
    • @endforeach
    @endforeach @endforeach
    任务
    只需要与
    任务列表
    相关,因为
    任务列表
    已经包含了与
    项目
    的关系。直接将
    任务
    项目
    相关是多余的。是的,我也这么想。那太过分了。你能帮我进一步吗?我不知道关于Laravel,如果你正在使用MySQL,我可以直接帮助你。你必须创建多对多关系,然后使用hasManyThrough方法访问数据。Project有许多Takslist(多对多或1->多)Takslist有许多任务(多对多ot 1-many取决于你的需求)您好,如果我看一下文档,看起来最接近我应该使用的函数是“Has Many Through”(我想是吧?)。但我不知道如何使用它。这是它背后的逻辑。是的。但是您能用一些示例代码(或者更好的是,用我自己的结构的示例)从A-Z解释它吗.我对Laravel很陌生。你读过Laravel文档吗?我写这些文档的方式应该可以很容易地转换为代码…是的。我读过。我对代码做了一些更改。我将更新主要帖子。你真的不需要任务表上的项目id,但是如果你读了,那么你可以直接从项目模型中进行hasMany。(项目有许多任务)。但是,这与任务列表关系是多余的。我知道任务上不需要project_id,将删除该id。是的,我需要先在任务列表和任务之间建立关系。我现在已更新了上面的代码。你能帮我进一步吗?谢谢。这种关系的架构将是什么样子?