3

我正在尝试获得在 Laravel Lighthouse GraphQL 中工作的 HasOne 关系。
它不起作用。突变不会给出错误,但也不会更新关系(员工 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!]!,但没有任何效果。

4

1 回答 1

0

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

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

简而言之
hasOne关系没有associate()or方法dissociate()。关系没有,或。
_ _ 但关系确实有和。hasManysync()attach()detach()
belongsToassociate()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
    }
  }
}
于 2020-01-07T18:18:59.473 回答