framework icon indicating copy to clipboard operation
framework copied to clipboard

saveAll 同时新增/更新数据时数据错误应如何处理?

Open gyjcode opened this issue 1 year ago • 9 comments

如题,使用 saveAll 关联新增数据的时候,因为同时包含有:新增的数据(没有 主键id)与更新的数据(有 主键id)导致数据只更新了一条,怎么处理? image image image

gyjcode avatar Sep 28 '22 01:09 gyjcode

把有主键和无主键分离出来,然后事务下分别 saveAll ?

xhwsd avatar Sep 30 '22 04:09 xhwsd

把有主键和无主键分离出来,然后事务下分别 saveAll ?

不清楚为什么出现的这种状况,感觉最好底层处理下

gyjcode avatar Sep 30 '22 05:09 gyjcode

      $user = new User;
       $list = [
            ['id'=>1, 'name'=>'thinkphp', 'title'=>'[email protected]'],
            ['name'=>'onethink', 'title'=>'[email protected]']
        ];
        $user->saveAll($list);

没有问题,带主键的会更新,没有主键的新增

yuanzhihai avatar Sep 30 '22 07:09 yuanzhihai

你这是单纯的saveAll,他说的是模型一对多的操作

augushong avatar Sep 30 '22 07:09 augushong

$blog = Blog::find( 1 ); $blog->comment()->saveAll( [ ['id' => 1,'content' => 'aaaaa',], ['content' => 'bbbbbb'] ] ); 一样的啊

yuanzhihai avatar Sep 30 '22 07:09 yuanzhihai

你是在面向 issue 编程吗?

hongfs avatar Oct 01 '22 14:10 hongfs

$blog = Blog::find( 1 ); $blog->comment()->saveAll( [ ['id' => 1,'content' => 'aaaaa',], ['content' => 'bbbbbb'] ] ); 一样的啊

我又试了下还是这样,可能是我的代码逻辑结构有问题,我再看看。另外我又发现了一个问题,如果批量新增的两条数据【唯一字段】相同,则只会新增一次,不会提示重复,我在多测试测试看看吧。

gyjcode avatar Oct 02 '22 00:10 gyjcode

你是在面向 issue 编程吗?

用其他方法倒是也能做,就是麻烦点儿。这里发现问题了我就提出来了,方便其他用户注意及框架发展。

gyjcode avatar Oct 02 '22 01:10 gyjcode

https://user-images.githubusercontent.com/45870098/194215854-44dd33ad-f561-40b0-be02-bc678e38c4ed.mp4

还是不行,感觉是 Postman 的问题

gyjcode avatar Oct 06 '22 04:10 gyjcode