本文介绍在 laravel 中高效同步关联数据的方法,通过比对目标数据集与数据库现有记录,自动完成新增、保留或删除操作,避免冗余查询和逻辑混乱。
在 Laravel 开发中,常需根据动态输入(如前端提交的多选商品 ID 列表)同步中间表(如 category_product)的关联关系。核心需求并非简单“存在即跳过”,而是实现三态同步逻辑:
✅ 保留已存在且仍需关联的记录;
➕ 新增当前缺失但应存在的记录;
➖ 删除已存在但本次不再需要的记录。
你提供的原始代码仅实现了“查无则建”,却未处理“该删不删”的问题。而修正版中将 delete() 写入 firstOr() 的闭包,逻辑上存在严重缺陷:firstOr() 仅在记录不存在时触发闭包,因此 delete() 永远不会执行——这与预期完全相反。
✅ 正确解法:分三步原子化处理
推荐使用 Laravel 原生的集合操作与批量查询,兼顾性能与可读性: