laravel - Lighthouse 根据其他属性值更改字段值
问题描述
我正在使用带有 Laravel 5.8 的Lighthouse来公开某些信息。
假设我有 2 张桌子:
Order
--------
id
status
Results
--------
id
result_value
order_id
还有我的架构
type Order {
id: ID!
status: String,
results: [Result!]! @hasMany
}
type Result {
id: ID!
result_value: String,
order_id: Order! @belongsTo
}
type Query {
order(id: ID @eq): Order @find,
}
如果我运行下一个查询按预期工作,但是......
{
order(id: 123) {
status
results {
result_value
}
}
}
我想要完成的是在等于某物order.results.result_value
时返回 null 或空。order.status
我正在尝试使用自定义字段指令,但我不确定我想要的是否可以实现,因为模型尚未加载
理想情况下,自定义指令是理想的,因为这不是唯一的属性,也不是我需要隐藏的唯一关系。
我(想我)不能使用@can
,因为我的请求将使用自定义身份验证,并且数据无法通过基于角色的访问模型获得。
@where
,@whereConditions
并且不能使用其他过滤器指令,因为我没有尝试过滤所有数据。当另一个模型属性等于某个值时,我想隐藏模型属性值
关于如何解决这个问题的任何建议?
解决方案
所以我看到了多种解决方案。
@method
指令Order
type Order {
id: ID!
status: String,
results: [Result!]! @method(name: "getResults") @with(relation: "results")
}
然后在你的Order
类上处理方法中的过滤getResults
,有些像这样
public function getResults()
{
return $this->results->when($this->status === 'something', function (Collection $results) {
return $results->each(function (Result $result) {
$result->result_value = null;
});
});
}
@method
指令Result
type Order {
id: ID!
status: String,
results: [Result!]! @hasMany
}
type Result {
id: ID!
result_value: String @method(name: "getResult") @with(relation: "order")
order_id: Order! @belongsTo
}
然后在你的Result
模型中进行过滤,概率。就像是
public function getResult()
{
if ($this->order->status === 'something') {
return null;
}
return $this->result_value;
}
当然,如果愿意,这也可以通过使用属性 getter 来完成 :)
推荐阅读
- c# - 如何访问 .batch 打开的 CMD?
- java - 调谐器不接受声音(调谐器应用程序不起作用)
- swift - 为什么可解码结构不符合自定义结构变量
- reactjs - 如何在 Heroku 上使用 React 和 Flask 创建部署管道?
- javascript - 使用自身构造函数初始化对象属性
- robotframework - 使用前面声明的变量创建列表
- javascript - 如何使用 axios 并获取 JSON 数据
- html - 为什么 robots.txt 很重要?没有 robots.txt 的网站是否安全?
- facebook-graph-api - Leadgen Webhook:请求此资源需要用户访问令牌
- javascript - XSS 攻击和编码