laravel - API 资源中的条件加载数据:如何“通过”条件?
问题描述
我有一个小问题要解决。在我的应用程序中,我正在处理很多模型,每个模型都有类似的东西:
- 模型资源
- 模型资源集合
- 模型资源概览
- 模型资源概览集合
原因是:有时我不需要所有可见的信息,如果我使用ModelResource
- 在这种情况下我调用ModelResourceOverview
.
例子
邮政资源
- title
- tags
- content
- author
例子
PostOverviewResource
- title
- author
因为我有很多模型,所以我有大量的 ApiResource-Classes,我想摆脱它。
我考虑过$this->when
在资源中使用并将“完整”或“概述”之类的内容传递给控制器中的请求。
例子
$data
= new PostResource($this->post);
所以我的问题是:这是将其添加到的最佳方式request
还是有更方便/更好的方式来处理这个?
解决方案
如果您关于“可见与否”的逻辑与当前请求绑定,那么您应该使用when
或mergeWhen
如您所提到的(此处的所有内容https://laravel.com/docs/7.x/eloquent-resources#conditional-attributes),因此您将只有 2 个资源而不是 4 个
public function toArray($request)
{
return [
'title' => $this->title,
'author' => $this->author,
$this->mergeWhen($this->needsFullData($request), [
'tags' => $this->tags,
'content' => $this->content,
]),
];
}
protected function needsFullData($request)
{
//Your logic
}
推荐阅读
- java - Springfox Swagger:无法解析指针:/definitions/Instant
- laravel - 使用 pagenavi 功能的查询不起作用,而 get 功能起作用
- sql - 在 SQL Server 中,我们可以比较一个表中的外键和其他表中的唯一键中的空值吗?
- mysql - 在mysql中确认小数(M,D)的大小
- azure - 从 azure 函数获取标头值
- google-apps-script - 复制行并附加它,保持谷歌脚本中的文本格式
- asp.net-core - asp.net core 2 具有默认存储的身份自定义存储提供程序
- html - 如何将单选按钮与左侧的文本对齐?
- javascript - React Native:iOS 听写无法清除文本输入
- python - 使用 matplotlib 绘制 2D 效率