Hasura GraphQL:如何批量插入含关联讲座的多个活动
批量插入关联的活动与讲座(一次Mutation实现)
可以通过嵌套批量插入实现需求,无需逐个发送Mutation。以下是具体方案:
正确的嵌套插入写法
你之前的尝试中,lectures_data.data仅传入了单个对象,实际上它支持接收数组,以此实现单个活动对应多个讲座的批量插入。数据库会自动为新生成的event ID赋值给对应讲座的event_id外键,无需手动指定。
Mutation 定义
mutation insertEvents($objects: [events_insert_input!]!) { insert_events(objects: $objects) { affected_rows returning { id lectures { id lecture_title } } } }
变量示例(多个活动+对应多讲座)
{ "objects": [ { "datetime": "2024-05-20 10:00:00", // 补充events表的其他必填字段 "lectures_data": { "data": [ { "lecture_title": "基础入门讲座", "is_done": false, "is_planned": true, "order": 1 }, { "lecture_title": "进阶实践讲座", "is_done": false, "is_planned": true, "order": 2 } ] } }, { "datetime": "2024-05-21 14:00:00", // 补充events表的其他必填字段 "lectures_data": { "data": [ { "lecture_title": "行业趋势分享", "is_done": false, "is_planned": true, "order": 1 } ] } } ] }
关于你第二种尝试的问题
分开插入events和lectures的方式不可行,因为event的ID是数据库自动生成的,无法提前预知并赋值给lectures的event_id。而嵌套插入属于同一Mutation内的原子操作,数据库会自动处理外键关联,避免了这个问题。
结论:无需通过forEach循环逐个发送请求,用上述嵌套批量插入的写法即可一次完成所有数据插入。
内容的提问来源于stack exchange,提问作者oskar333
相关产品推荐
相关产品推荐

