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)
这条语句实现了硬删除的功能!