首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel Api资源

Laravel Api资源
EN

Stack Overflow用户
提问于 2019-11-28 03:22:25
回答 1查看 290关注 0票数 0

我试图使用Laravel的资源为我的数据表创建一个API。我有三个有感情的模特。每次我使用api路径来检查结果时,我都会在我的sub_specializations中得到一个空值。下面是已经格式化的JSON结果。

代码语言:javascript
运行
复制
    { 
"data":[ 
    { 
        "first_name":"Rusty",
        "last_name":"Ferry",
        "specializations":{ 
            "specialization_id":11,
            "specialization_name":"Endocrinology"
        },
        "sub_specializations":null
    },
    { 
        "first_name":"Nadia",
        "last_name":"Ondricka",
        "specializations":{ 
            "specialization_id":22,
            "specialization_name":"ENT"
        },
        "sub_specializations":null
    },
    { 
        "first_name":"Erich",
        "last_name":"Torphy",
        "specializations":{ 
            "specialization_id":2,
            "specialization_name":"Cardiologist"
        },
        "sub_specializations":null
    }
    ]
}

这是我所有的资源。这就是DoctorsResource

代码语言:javascript
运行
复制
    public function toArray($request)
{
    return [
        'first_name' => $this->first_name,
        'last_name'  => $this->last_name,
        'specializations' => new SpecializationsResource($this->specializations),
        'sub_specializations' => new SubSpecializationsResource($this->sub_specializations),
    ];
}

专业化资源

代码语言:javascript
运行
复制
    public function toArray($request)
{
    return [
        'specialization_id' => $this->specialization_id,
        'specialization_name' => $this->specialization_name,
    ];

}

SubSpecializations

代码语言:javascript
运行
复制
    public function toArray($request)
{
    return [
        'sub_specialization_id' => $this->sub_specialization_id,
        'sub_specialization_name' => $this->sub_specialization_name,
        'doctors' => new DoctorsResource($this->doctors),
    ];
}

最后,这是控制器

代码语言:javascript
运行
复制
    protected $user;

public function __construct(Doctors $doctors){
    $this->doctors = $doctors;
}

public function index()
{
    $doctors = $this->doctors->with('specializations', 'subSpecializations')->get();
    return DoctorsResource::collection($doctors);
}

我所期待的结果与此类似

代码语言:javascript
运行
复制
{ 
"data":[ 
    { 
        "first_name":"Rusty",
        "last_name":"Ferry",
        "specializations":{ 
            "specialization_id":11,
            "specialization_name":"Endocrinology"
        },
        "sub_specializations": {
            "sub_specialization_name":"value"
       }
    }
  ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 06:11:45

您必须确保有针对特定医生的子专门性数据。

如果有数据,那么将该数据添加到“医生资源”中,否则将为空。

只需在“医生资源”中更改行,如:

代码语言:javascript
运行
复制
'sub_specializations' => $this->sub_specializations !== null ? new SubSpecializationsResource($this->sub_specializations) : '',

你也可以用specializations做同样的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59081278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档