如何获取具有 hasMany 关系和 laravel 中的 hasMany 的数据?
How to get data with hasMany relation and hasMany in laravel?
我有两个 table(项目、任务)。
项目 table 结构如下所示:
id - title - desc - others_column
1 - title - desc - others
2 - title - desc - others
任务 table 结构如下所示:
id - title - desc - project_id - parent_id - others_column
1 - title - desc - 1 - null - others
2 - title - desc - 1 - 1 - others
3 - title - desc - 2 - null - others
4 - title - desc - 2 - 3 - others
我去查询了一下,Project Controller是这样的
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Project;
use App\Task;
class ProjectsController extends Controller {
public function index(Request $request) {
$projects = new Project;
$projects = $projects->with('tasks');
$projects = $projects->get();
}
}
项目模型如下所示:
use Illuminate\Database\Eloquent\Model;
class Project extends Model {
public function tasks() {
return $this->hasMany('App\Task');
}
}
我得到的结果如下所示:
{
"id":1,
"title":"title",
"desc":"desc",
"tasks":[
{
"id":1,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id":null,
}
{
"id":2,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id": 1,
}
] },
但我希望得到的结果如下所示:
{
"id":1,
"title":"title",
"desc":"desc",
"tasks":[
{
"id":1,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id":null,
"subtasks": [
{
"id":2,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id": 1,
},
{
"id":3,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id": 1,
},
]
},
{
"id":4,
"title":"Title",
"desc":"Desc",
"todo_project_id":2,
"parent_id":null,
"subtasks": [ ]
}
] },
现在任何人都可以帮助我获得正确的结果。
谢谢
使用这个subtasks
关系:
class Task extends Model {
public function subtasks() {
return $this->hasMany(self::class, 'parent_id')->with('subtasks');
}
}
$projects = Project::with('tasks.subtasks')->get();
我有两个 table(项目、任务)。
项目 table 结构如下所示:
id - title - desc - others_column
1 - title - desc - others
2 - title - desc - others
任务 table 结构如下所示:
id - title - desc - project_id - parent_id - others_column
1 - title - desc - 1 - null - others
2 - title - desc - 1 - 1 - others
3 - title - desc - 2 - null - others
4 - title - desc - 2 - 3 - others
我去查询了一下,Project Controller是这样的
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Project;
use App\Task;
class ProjectsController extends Controller {
public function index(Request $request) {
$projects = new Project;
$projects = $projects->with('tasks');
$projects = $projects->get();
}
}
项目模型如下所示:
use Illuminate\Database\Eloquent\Model;
class Project extends Model {
public function tasks() {
return $this->hasMany('App\Task');
}
}
我得到的结果如下所示:
{
"id":1,
"title":"title",
"desc":"desc",
"tasks":[
{
"id":1,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id":null,
}
{
"id":2,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id": 1,
}
] },
但我希望得到的结果如下所示:
{
"id":1,
"title":"title",
"desc":"desc",
"tasks":[
{
"id":1,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id":null,
"subtasks": [
{
"id":2,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id": 1,
},
{
"id":3,
"title":"Title",
"desc":"Desc",
"todo_project_id":1,
"parent_id": 1,
},
]
},
{
"id":4,
"title":"Title",
"desc":"Desc",
"todo_project_id":2,
"parent_id":null,
"subtasks": [ ]
}
] },
现在任何人都可以帮助我获得正确的结果。
谢谢
使用这个subtasks
关系:
class Task extends Model {
public function subtasks() {
return $this->hasMany(self::class, 'parent_id')->with('subtasks');
}
}
$projects = Project::with('tasks.subtasks')->get();