Laravel 9中attach方法是否有syncWithPivotValues等效方法?
回答
attach方法原生就支持你需要的、批量为所有关联记录统一设置中间表字段的能力,你给出的示例代码本身就是可直接运行的正确写法,不需要额外封装。
具体使用规则
- 当
attach的第一个参数传入主键ID组成的一维数组(比如示例中的[1, 2, 3])时,第二个参数传入的键值对数组,会自动作为公共中间表字段值,应用到所有待关联的记录上。你写的示例执行后,生成的3条中间表关联记录的active字段都会被统一设为true。 - 注意和
syncWithPivotValues的行为差异:attach仅做关联新增操作,不会自动移除不在传入ID列表里的已有关联,适合只追加关联、不需要对齐全量关联列表的场景。 - 如果第一个参数传入的是带单独pivot配置的关联数组,第二个参数传入的公共字段值,只会自动补充到没有单独配置字段的记录上,单独配置的字段优先级更高,会覆盖公共传值,示例如下:
// 单独给role 1设置active为false,role 2、3沿用公共配置active=true $user->roles()->attach( [1 => ['active' => false], 2, 3], ['active' => true] ); // 执行后中间表数据结果: // role_id=1: active = false // role_id=2: active = true // role_id=3: active = true
提示:该能力从Laravel早期版本就已支持,并非Laravel 9新增特性,
syncWithPivotValues本质是为sync场景封装的便捷语法糖。
内容的提问来源于stack exchange,提问作者rifqy abdl
相关产品推荐
相关产品推荐

