如何解决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
等于某物时,将 order.status
返回为 null 或空。
我正在尝试使用 custom field directive,但我不确定我想要的是否可以实现,因为模型尚未加载
理想情况下,自定义指令是理想的,因为这不是唯一的属性,也不是我需要隐藏的唯一关系。
我(认为我)无法使用 @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 来完成此操作:)
,有多种方式。从自定义字段解析器(简单但您必须处理分页),使用 @builder
并根据您的 status
进行过滤。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。