我正在尝试让 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/