微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-如何在Laravel中使用hasMany关系和hasMany获取数据?

我有两个表(项目,任务).

projects表结构如下所示:

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

我试图查询,项目控制器看起来像这样.

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

现在任何人都可以帮助我获得正确的结果.

谢谢

解决方法:

使用以下子任务关系:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐