php - GraphQL - 如何保存嵌套数据
问题描述
你好,我们在寻找最佳连接方式时遇到问题
GraphQL, Rebing GraphQL, Laravel and Eloquent.
主要问题与嵌套的突变有关resources
。
例如:Manufacturer->Brand->Product
到目前为止,我们已经尝试过:
mutation {
addManufacturer(
address: "New York"
brands: [
{
name: "Brand A"
products: [
{
name: "Model 1"
}
{
name: "Model 2"
}
]
}
{
name: "Brand B"
products: [
{
name: "Model 3"
}
{
name: "Model 4"
}
]
}
]
) {
address
}
}
mutation {
updateManufacturer(
id: 1
address: "LA"
brands: [
{
id: 1
name: "Brand Z"
products: [
{
id: 1
name: "Model 10"
}
{
name: "Model 11"
}
]
}
]
) {
address
}
}
这基本上意味着:
addManufacturer 突变只是关于在数据库中创建新记录
updateManufacturer 突变是关于更新具有当前 ID 的记录并创建没有 ID 的记录。
问题:
尽管 GraphQL 允许定义嵌套结构,但我们在 Eloquent ORM 中表示这种结构时遇到了问题。现在我们将呈现的数据分成两个独立的集合。一组包含需要创建的数据,第二组包含需要更新的数据。为此,我们有一个递归方法,它遍历上述数据结构并在与其父级的关系的上下文中处理(创建/更新)记录。
要执行更新,我们需要获取我们拥有 ID 的所有模型(在数据结构中)。使用提供的 ID 的构造函数创建模型不会更新记录,而是创建一个新记录。使用 createOrUpdate 方法创建新模型也会对数据库执行选择查询。
我们遇到的另一个问题与用户分别对每个嵌套“资源”的授权有关。例如,我们需要应用一些授权逻辑来更新产品(只有产品的创建者才能更新它)。我们不想把这样的逻辑放在我们的递归方法中,因为我们认为它不属于那里。我们可以将这样的逻辑委托给其他地方,但是我们必须再次从数据库中获取它。
我们的担忧/问题:
我们应该使用一些不同的方法吗?
我们应该使用具有类似属性的嵌套对象
create: [], update: [], delete: []
而不是数组吗?如何将这种数据结构填充到具有关系的 Eloquent 模型中?
可以嵌套这样
resources
吗GraphQL
?或者它是一种反模式?如何将所有嵌套的“资源”拆分为单独的突变?
解决方案
推荐阅读
- reactjs - 如何将 webpack 与 create-react-app 一起使用?
- linux - 参数传递到文件读取为 0
- android - 所有 Anko 引用都是未定义的
- angular - gridlayout中的Angular Nativescript绝对不起作用
- python - 如何确保我的按钮不会在 tkinter 中移动?
- javascript - 点击时 Vue.js 交换类
- php - 如何在 PHP 中使用 Php-ai/Php-ml 中的多个功能进行预测
- excel - 链接更新时暂停 VBA 脚本
- c++ - (反)序列化枚举类
- amazon-web-services - 尽管 CloudWatch 代理正在运行,但缺少 CloudWatch 日志组