1 回答
TA贡献2051条经验 获得超10个赞
我不确定你为什么为此使用 Raw 方法,但我想指出有一个 Count 方法可以实现你想要的:
db.Where("name = ?", "jinzhu").Or("name = ?", "jinzhu 2").Find(&users).Count(&count)
//// SELECT * from USERS WHERE name = 'jinzhu' OR name = 'jinzhu 2'; (users)
//// SELECT count(*) FROM users WHERE name = 'jinzhu' OR name = 'jinzhu 2'; (count)
db.Model(&User{}).Where("name = ?", "jinzhu").Count(&count)
//// SELECT count(*) FROM users WHERE name = 'jinzhu'; (count)
我从文档中整理了一个非常简单的示例:
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)
type Porg struct {
gorm.Model
Name string
}
func main() {
db, err := gorm.Open("sqlite3", "test.db")
if err != nil {
panic("failed to connect database")
}
defer db.Close()
// Migrate the schema
db.AutoMigrate(&Porg{})
// Create
for i := 1; i <= 100; i++ {
db.Create(&Porg{Name: "John"})
}
// Read
var porgs []Porg
var count int
db.Model(&porgs).Count(&count)
fmt.Println(count)
}
输出:100
使用Model您可以指定要查询的模型的方法,这不会直接查询数据库。使用db.Find(&porgs).Count(&count)实际上会向数据库发送 2 个 SQL 查询。
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报