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

标签 laravel graphql laravel-lighthouse

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

相关文章:

php - Laravel 连接表并获得用户的最大订单

php - Laravel 显示类别计数不显示

mysql - Laravel - 按月获取数据

graphql - 如何将 HotChocolate 中的模式打印为 GraphQL SDL

laravel-5.7 - 在 Router.php 第 366 行:传递给 Illuminate\Routing\Router::group() 的参数 1 必须是数组类型,

php - 在 Blade 中访问 Laravel .env 变量

javascript - 使用 graphql 在 apollo 服务器中指定类型时出现问题

vue.js - Apollo GraphQL 订阅在 Vuejs 中不起作用

laravel - 按 laravel lighthouse graphql 中的相关列排序

graphql - GraphQL 模式中的空列表 - 应该为 null 或 []?