Как получить данные с отношением hasMany и hasMany в laravel? - PullRequest
0 голосов
/ 07 октября 2018

У меня есть две таблицы (проекты, задачи).

структура таблицы проектов выглядит следующим образом:

id - title - desc - others_column
1  - title - desc - others
2  - title - desc - others

структура таблицы задач выглядит следующим образом:

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": [ ]
     }
  ] }, 

Теперь любой может помочь мне получить правильные результаты.

Спасибо

1 Ответ

0 голосов
/ 07 октября 2018

Используйте это subtasks отношение:

class Task extends Model { 
    public function subtasks() {
        return $this->hasMany(self::class, 'parent_id')->with('subtasks');
    }
}

$projects = Project::with('tasks.subtasks')->get();
...