Hasura二级嵌套Upsert问题:user.department为空,如何关联字段?
解决Hasura二级嵌套Upsert中用户关联字段为空的问题
结论:可以在单个查询中自动设置users.department和users.subdivision,无需提前知晓它们的具体值
问题原因
当前的嵌套Upsert在更新用户时仅指定更新role字段,没有利用Hasura的嵌套上下文关联自动填充层级关系中的department和subdivision;同时二级嵌套(department→subdivision→user)下,新插入用户时Hasura只会自动设置直接父级的subdivision,不会自动传递祖父级的department,导致该字段为空。
解决方案
通过Hasura的父级引用操作符^,在用户的嵌套Upsert配置中动态引用上层的subdivision和department ID,无论插入新用户还是更新已有用户,都能自动关联这两个字段。
修改后的变量参数
{ "d": { "onec_id": "test1", "title": "test", "subdivisions": { "data": [ { "description": "test1", "users": { "data": { "login": "test1", "role": 1, "onec_id": "test1", // 新插入用户时自动关联祖父级department的ID "department": "^.^.id", // 新插入用户时自动关联父级subdivision的ID(可省略,Hasura会自动处理) "subdivision": "^.id" }, "on_conflict": { "constraint": "user_login_uindex", // 更新时需包含department和subdivision字段 "update_columns": [ "role", "department", "subdivision" ], // 更新时动态设置关联字段 "_set": { "subdivision": "^.id", "department": "^.^.id" } } } } ], "on_conflict": { "constraint": "subdivision_u_onec_id", "update_columns": [ "description" ] } } } }
关键说明
^是Hasura的父级引用符号:^.id代表当前层级的父级(即subdivision)的ID;^.^.id代表父级的父级(即department)的ID;
- 更新用户时,必须在
update_columns中添加department和subdivision,同时通过_set引用父级ID,确保关联字段被正确更新; - 插入新用户时,通过
data中的父级引用自动填充department字段(subdivision可省略,Hasura会通过嵌套关系自动关联)。
执行后效果
修改后执行查询,返回的users对象中department会被正确设置为对应部门的ID,subdivision也会保持正确关联,同时不会出现users返回为空的情况。
内容的提问来源于stack exchange,提问作者tannerman
相关产品推荐
相关产品推荐

