Laravel动态表单字段数据库更新问题
看起来你现在的更新逻辑只覆盖了「和数据库现有条目数量匹配时的字段更新」,没处理动态增删后的关联数据同步,核心遗漏的逻辑主要有这几块:
后端需要识别并删除被前端移除的Subject行
当前你点击「Delete Subject」只是在前端移除了字段,但后端不知道哪些Subject被删掉了。解决思路是:提交Update请求时,把前端当前保留的所有Subject的ID(比如通过隐藏输入框存储)一起传给后端。后端拿到这个ID列表后,先找到当前New关联的所有Subject,然后把不在这个ID列表里的Subject调用销毁方法(比如subject.destroy)删除。区分「更新现有Subject」和「新增Subject」的逻辑
新增的Subject在前端是没有数据库ID的(或者ID为空),后端需要对每个提交的Subject条目做判断:如果条目带有有效ID,就找到对应的Subject模型更新字段;如果没有ID,就创建新的Subject并关联到当前New模型(利用你已经建立的一对多关联,比如@new.subjects.create(...))。前端需要传递准确的Subject状态数据
点击「Add another Subject」时,生成的新字段组不要包含已有的数据库ID(可以用空值或者不渲染ID字段);点击「Delete Subject」时,直接移除包含该Subject ID的字段组,这样提交表单时,后端能拿到当前用户想要保留的所有Subject数据,而不是之前的全量数据。可选但推荐:添加事务保证数据一致性
把更新、删除、新增Subject的操作包裹在数据库事务里,这样如果其中任何一步操作失败(比如新增时字段验证不通过),整个流程会回滚,避免出现数据库里部分数据更新、部分没更新的不一致情况。
内容的提问来源于stack exchange,提问作者universal

