Laravel Lighthouse Graphql HasOne 嵌套关系不起作用
Posted
技术标签:
【中文标题】Laravel Lighthouse Graphql HasOne 嵌套关系不起作用【英文标题】:Laravel Lighthouse Graphql HasOne nested relation not working 【发布时间】:2020-04-20 03:15:12 【问题描述】:我正在尝试建立 HasOne 关系以在 Laravel Lighthouse GraphQL 中工作。 它不起作用。突变不会给出错误,但也不会更新关系(员工 id 保持不变,而我希望它更改为 2):
mutation
updateAccount(input:
id: 12
employee:
connect: 2
)
id
employee
id
我的架构如下所示:
type Mutation
updateAccount(input: UpdateAccount! @spread): Account! @update
input UpdateAccountInput
id: ID!
employee: CreateEmployeeRelationInput @hasOne
input CreateEmployeeRelationInput
connect: ID!
type Account
id: ID!
...
employee: Employee! @hasOne
type Employee
id: ID!
...
account: Account @belongsTo
Account 和 Employee 模型如下所示:
class Account extends Model
public function employee(): HasOne
return $this->hasOne(\App\Models\Employee::class, 'account_id');
class Employee extends Model
public function account(): BelongsTo
return $this->belongsTo(\App\Models\Account::class, 'account_id');
任何帮助或建议将不胜感激。
到目前为止,我尝试添加/删除@hasOne
,或将ID!
更改为[ID!]!
,但没有任何效果。
【问题讨论】:
您的Account
和Employee
类型是什么样的?
我已将Account
和Employee
类型添加到问题中(仅显示相关的字段)。这些类型会有什么不同吗?
我在您的代码中看到的唯一与我的不匹配的是您在输入中使用了@hasOne
指令。
你确定是一样的吗?如果我正确阅读了文档,那么我尝试做的事情在 Lighthouse 中是不可能的。我在这里打开了一个问题:github.com/nuwave/lighthouse/issues/1109。
【参考方案1】:
我发现 Lighthouse 没有提供我想要的功能,因为 Laravel 没有提供它,而 Lighthouse 试图镜像 Laravel 的功能。
更多信息可以在这个问题的答案中找到:https://github.com/nuwave/lighthouse/issues/1109#issuecomment-570544848
简而言之:hasOne
关系不有 associate()
或 dissociate()
方法。hasMany
关系不有 sync()
、attach()
或 detach()
。
但是belongsTo
关系确实有associate()
和dissociate()
。
因此,如果帐户 hasOne 员工,我会不这样做:
mutation
updateAccount(input:
id: 12
employee:
connect: 2
)
id
solis_id
employee
id
另外,如果一个帐户有很多员工,我可以不这样做:
mutation
updateAccount(input:
id: 12
employees:
connect: [2, 3]
)
id
solis_id
employees
id
但我可以达到同样的结果是这样的:
mutation
updateEmployee(input:
id: 2
account:
connect: 2
)
id
account
id
【讨论】:
伙计,我也遇到了同样的问题,但我无法解决:( @mentamarindo 祝你好运!我将无法提供帮助,因为我停止使用 php for GraphQL(切换到 JS,这并不容易)。 如果JS不简单为什么要切换? 好问题。主要是因为我发现我更喜欢 javascript。我选择了 Nexus+Prisma,它对我来说看起来很有希望(对一件事的完整打字稿支持),但它的边缘仍然很粗糙。以上是关于Laravel Lighthouse Graphql HasOne 嵌套关系不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在lighthouse graphql laravel中获取自定义指令参数?
Laravel Lighthouse 配置 - 无法找到可发布的资源
变异中的 Laravel LightHouse GraphQL DateTime 输入始终为空