如何防止我的整个表被删除

时间:2018-08-29 00:33:27

标签: go go-gorm

如果在下面的第一个查询中找不到我的someModel的任何读物,则 delete语句然后删除整个表

delete from somemodels

预防这种情况的最佳方法是什么?

someModel := &SomeModel{}

db.Where("some_id = ? and other_id = ?", someModel.UserId, someModel.Id).First(&someModel)

db.Delete(&someModel)

当前,我不检查是否确实找到了模型并从数据库中返回了模型,我知道我应该进行检查,但是执行此操作的最佳方法是什么?

只检查它是否不是nil? model.Id> 0吗?

2 个答案:

答案 0 :(得分:2)

如您所料,由于未找到记录,它会删除整个表,即模型中没有任何东西可以用作条件,因此将条件保留为空白并删除整个表。

您可以检查是否找到了记录,而无需检查模型本身。

例如:

if !db.Where("some_id = ? and other_id = ?", someModel.UserId, someModel.Id).First(&someModel).RecordNotFound {
    db.Delete(&someModel)
}

if err := db.Where("some_id = ? and other_id = ?", someModel.UserId, someModel.Id).First(&someModel).Error; err != nil {
    if gorm.IsRecordNotFoundError(err) {
        // record not found
    } else {
        // something else went wrong
    }
} else {
    db.Delete(&someModel)
}

答案 1 :(得分:0)

根据doc,您需要检查主要ID是否为空白。我不确定您的模型是什么样子,但是我想您应该检查<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <div class="navbar navbar-default navbar-fixed-top" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#?>"><img src="http://placehold.it/100" style="height: 25px;" class="d-inline-block align-middle">Text</a> </div> <div class="navbar-collapse collapse navbar-right"> <ul class="nav navbar-nav"> <li><a href="#">item1</a></li> <li><a href="#">item2_1<br>item2_2</a></li> <li class="menuletra"><a href="#">item3</a></li> </ul> </div> <!--/.nav-collapse --> </div> </div>是否为空。