Php Laravel 5-如何在3个表之间建立关系?
我的数据库中有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
'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。是的,我需要先在任务列表和任务之间建立关系。我现在已更新了上面的代码。你能帮我进一步吗?谢谢。这种关系的架构将是什么样子?