gpt4 book ai didi

Laravel Lighthouse Graphql HasOne 嵌套关系不起作用

转载 作者:行者123 更新时间:2023-12-05 07:15:39 28 4
gpt4 key购买 nike

我正在尝试让 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!]!,但没有任何效果。

最佳答案

我发现 Lighthouse 没有提供我想要的功能,因为 Laravel 没有提供它,而 Lighthouse 试图镜像 Laravel 的功能。

更多信息可以在这个问题的答案中找到:https://github.com/nuwave/lighthouse/issues/1109#issuecomment-570544848

简而言之:
hasOne 关系associate()dissociate() 方法。
hasMany 关系sync()attach()detach().
但是 belongsTo 关系确实associate()dissociate()

因此,如果一个帐户有一个员工,我不会这样做:

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
}
}
}

关于Laravel Lighthouse Graphql HasOne 嵌套关系不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59546687/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com