Gorm使用的一些经验--如何彻底删除一条数据

中文文档:https://gorm.io/zh_CN/

我们知道,在使用gorm的时候,如果我们使用了gorm内置的model,会存在一个delete_at字段,当我们删除一条数据,这条数据并不会在数据库中被彻底删除

举个例子:

  数据库中的数据如下:

   现在通过实现的接口,去删除id=402的数据,在这里因为我设计的接口原因,请求参数限制为Name与Logo字段,所以通过Name去调grpc端的接口来删除该条数据

func DeleteBrandTest() {
	_, err := brandClient.DeleteBrand(context.Background(), &proto.BrandRequest{
		Name: "品牌198",
	})
	if err != nil {
		panic(err)
	}
	fmt.Println("删除成功")

}

接口代码:

func (s *GoodsServer) DeleteBrand(ctx context.Context, req *proto.BrandRequest) (*emptypb.Empty, error) {
	//if result := global.DB.Delete(&model.Brands{Name: req.Name}); result.RowsAffected == 0 {
	//	return nil, status.Errorf(codes.NotFound, "该品牌不存在")
	//}
	var brands model.Brands
	result := global.DB.Where(&model.Brands{Name: req.Name}).First(&brands)
	if result.RowsAffected == 0 {
		return nil, status.Errorf(codes.NotFound, "该品牌不存在")
	}
	fmt.Println(brands.ID)

	global.DB.Unscoped().Delete(&brands)
	return &emptypb.Empty{}, nil
}

这段代码的逻辑是,首先在数据库中查询匹配的数据,若查询不到,则返回提示消息;然后最重要的部分来了,主要看这段代码global.DB.Unscoped().Delete(&brands)

这条语句实现了硬删除的功能!

 

posted @ 2023-06-02 21:59  99号的格调  阅读(325)  评论(0编辑  收藏  举报