多对多模型关联 saveAll 只增加一条数据

浏览:624 发布日期:2018/12/26 分类:求助交流 关键字: thinkphp5.1 多对多 模型 关联 saveAll bug
共三个模型
AuthRole 角色表 继承Model
AuthRule 权限表 继承Model
AuthRoleRule 中间表 继承Pivot

AuthRole 角色表 定义关联
$this->belongsToMany('AuthRule', 'AuthRoleRule', 'rule_id', 'role_id');

然后在控制器里执行:
$auth_role = AuthRoleModel::get(1);
$auth_role->rules()->detach();
$auth_role->rules()->saveAll([1,2,3,4,5,6]);

发现中间表只增加一条数据,查看sql日志,发现只 REPLACE INTO 了一条数据,剩下的都是UPDATE

查看thinkphp源码,在BelongsToMany类里面的attach方法,循环调用Model类的save方法,Model里面有个属性 $this->exists,只要第一次insert了,就是true,后面的数据,全部update,所以导致只增加了一条数据,后面的全部更新第一条数据

请问这个是bug吗?麻烦解答下,版本5.1.31 LTS
最佳答案
评论( 相关
后面还有条评论,点击查看>>