概述
字段 defaultValue(含 Field.user({defaultValue:'current_user'}))由运行时在用户 beforeInsert hook 之后才解析。于是「从被默认的字段派生第二个字段」的 hook,读到的是还未填充的 null。
定位
packages/objectql/src/engine.ts:2143 —— 执行 beforeInsert hook。packages/objectql/src/engine.ts:2181 —— applyFieldDefaults(默认值解析)在其后。
→ hook 读到的目标字段仍为 null,依赖它派生的字段算错。
复现(概要)
sales_person: Field.user({ defaultValue: 'current_user' }),POST 不带 sales_person:结果行 sales_person 被正确回填,但 beforeInsert 里派生的 current_status 因当时读到 sales_person == null 而算成 unassigned。显式传 sales_person → hook 看得到 → 正确。
期望
把 defaultValue(尤其 current_user)解析提前到 beforeInsert hook 之前,让派生 hook 能看到默认值;或至少文档明确当前顺序。
来源(项目 dogfood):steedos-labs/os-tianshun-mtc#29 · 与 #31 同族(#31 为 defaultValue 三问汇总)
概述
字段
defaultValue(含Field.user({defaultValue:'current_user'}))由运行时在用户beforeInserthook 之后才解析。于是「从被默认的字段派生第二个字段」的 hook,读到的是还未填充的null。定位
packages/objectql/src/engine.ts:2143—— 执行 beforeInsert hook。packages/objectql/src/engine.ts:2181——applyFieldDefaults(默认值解析)在其后。→ hook 读到的目标字段仍为 null,依赖它派生的字段算错。
复现(概要)
sales_person: Field.user({ defaultValue: 'current_user' }),POST 不带sales_person:结果行sales_person被正确回填,但 beforeInsert 里派生的current_status因当时读到sales_person == null而算成unassigned。显式传sales_person→ hook 看得到 → 正确。期望
把
defaultValue(尤其current_user)解析提前到 beforeInsert hook 之前,让派生 hook 能看到默认值;或至少文档明确当前顺序。来源(项目 dogfood):steedos-labs/os-tianshun-mtc#29 · 与 #31 同族(#31 为 defaultValue 三问汇总)