如果在下面的第一个查询中找不到我的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吗?
答案 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>
是否为空。