You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Migrations and models for forms, versions, sections and fields, so published forms are immutable and entries keep pointing at the version they were filled with.
Done. Definitions live in forms, form_versions, form_sections and form_fields (fields of a repeating group have a parent_id).
Decisions:
Drafts and published versions. A form has at most one draft. Publishing freezes it, and published versions and their sections and fields refuse changes (FormBuilderException). Entries reference form_version_id with restrictOnDelete.
Keys, not ids. The builder addresses sections and fields by key (group.key inside repeating groups). Draft rows are rewritten on every change and ids change, but URLs stay stable.
The definition is the interchange object.FormDefinition/Section/Field/Condition are what the builder, seeders, imports and the assistant all produce. FormVersion::replaceStructure() stores them, and a hash makes sync() idempotent.
Activity
Form definitions, versions, entries and the stencil compiler
n4ff4h commentedon Nov 5, 2026
Done. Definitions live in
forms,form_versions,form_sectionsandform_fields(fields of a repeating group have aparent_id).Decisions:
FormBuilderException). Entries referenceform_version_idwithrestrictOnDelete.group.keyinside repeating groups). Draft rows are rewritten on every change and ids change, but URLs stay stable.FormDefinition/Section/Field/Conditionare what the builder, seeders, imports and the assistant all produce.FormVersion::replaceStructure()stores them, and ahashmakessync()idempotent.Docs: docs/basic-usage/defining-forms.md