条件构建器参考
VEF Framework 查询条件构建器的完整方法参考。
基本条件
| 方法 | 说明 | 示例 |
|---|---|---|
Where(column, value) | 等于 | WHERE column = value |
Where(column, op, value) | 带操作符 | WHERE column > value |
WhereNot(column, value) | 不等于 | WHERE column <> value |
WhereNull(column) | 为空 | WHERE column IS NULL |
WhereNotNull(column) | 不为空 | WHERE column IS NOT NULL |
范围条件
| 方法 | 说明 | 示例 |
|---|---|---|
WhereIn(column, values) | 包含 | WHERE column IN (...) |
WhereNotIn(column, values) | 不包含 | WHERE column NOT IN (...) |
WhereBetween(column, v1, v2) | 范围 | WHERE column BETWEEN v1 AND v2 |
WhereNotBetween(column, v1, v2) | 不在范围 | WHERE column NOT BETWEEN v1 AND v2 |
字符串匹配
| 方法 | 说明 | 示例 |
|---|---|---|
WhereLike(column, pattern) | 模糊匹配 | WHERE column LIKE pattern |
WhereNotLike(column, pattern) | 不匹配 | WHERE column NOT LIKE pattern |
WhereILike(column, pattern) | 不区分大小写 | WHERE LOWER(column) LIKE LOWER(pattern) |
逻辑组合
| 方法 | 说明 | 示例 |
|---|---|---|
OrWhere(column, value) | OR 条件 | OR column = value |
OrWhereIn(column, values) | OR IN | OR column IN (...) |
WhereGroup(fn) | 条件分组 | AND (...) |
OrWhereGroup(fn) | OR 分组 | OR (...) |
日期条件
| 方法 | 说明 | 示例 |
|---|---|---|
WhereDate(column, date) | 日期等于 | WHERE DATE(column) = date |
WhereDateBetween(column, d1, d2) | 日期范围 | WHERE DATE(column) BETWEEN d1 AND d2 |
WhereYear(column, year) | 年份 | WHERE YEAR(column) = year |
WhereMonth(column, month) | 月份 | WHERE MONTH(column) = month |
子查询
| 方法 | 说明 |
|---|---|
WhereExists(fn) | EXISTS 子查询 |
WhereNotExists(fn) | NOT EXISTS 子查询 |
WhereInSubquery(column, fn) | IN 子查询 |
原始 SQL
| 方法 | 说明 |
|---|---|
WhereRaw(sql, args...) | 原始 SQL 条件 |
OrWhereRaw(sql, args...) | OR 原始 SQL |
使用示例
go
q := orm.NewQuery[models.User]().
Where("is_active", true).
Where("age", ">=", 18).
WhereIn("department_id", []string{"d1", "d2"}).
WhereLike("username", "%john%").
WhereGroup(func(q *orm.Query[models.User]) *orm.Query[models.User] {
return q.Where("role", "admin").OrWhere("role", "manager")
}).
WhereNotNull("email").
WhereDateBetween("created_at", "2024-01-01", "2024-12-31").
OrderBy("created_at DESC").
Limit(10)
users, err := q.Find()查询方法
| 方法 | 说明 |
|---|---|
Select(columns ...string) | 选择字段 |
Omit(columns ...string) | 排除字段 |
OrderBy(order string) | 排序 |
Limit(n int) | 限制数量 |
Offset(n int) | 偏移量 |
Preload(relations ...string) | 预加载关联 |
PreloadCondition(relation string, fn func(*gorm.DB) *gorm.DB) | 条件预加载 |
执行方法
| 方法 | 说明 |
|---|---|
Find() ([]M, error) | 查询多条 |
First() (*M, error) | 查询第一条 |
Count() (int64, error) | 计数 |
Exists() (bool, error) | 是否存在 |
Paginate(page, pageSize int) ([]M, int64, error) | 分页查询 |
聚合方法
| 方法 | 说明 |
|---|---|
Sum(column string) (float64, error) | 求和 |
Avg(column string) (float64, error) | 平均值 |
Max(column string) (interface{}, error) | 最大值 |
Min(column string) (interface{}, error) | 最小值 |
分组方法
| 方法 | 说明 |
|---|---|
GroupBy(columns ...string) | 分组 |
Having(condition string, args ...interface{}) | 分组条件 |
复杂查询示例
go
// Complex query with multiple conditions
q := orm.NewQuery[models.Order]().
Select("id", "order_no", "amount", "status", "created_at").
Where("status", "completed").
Where("amount", ">=", 100).
WhereGroup(func(q *orm.Query[models.Order]) *orm.Query[models.Order] {
return q.
Where("payment_method", "credit_card").
OrWhere("payment_method", "paypal")
}).
WhereDateBetween("created_at", "2024-01-01", "2024-06-30").
WhereNotNull("shipped_at").
Preload("User", "Items").
OrderBy("created_at DESC").
Limit(100)
orders, err := q.Find()
// Aggregation query
totalAmount, err := orm.NewQuery[models.Order]().
Where("status", "completed").
WhereDateBetween("created_at", "2024-01-01", "2024-01-31").
Sum("amount")
// Group by query
type SalesReport struct {
Date string `json:"date"`
TotalSales float64 `json:"totalSales"`
OrderCount int64 `json:"orderCount"`
}
var report []SalesReport
orm.DB().Model(&models.Order{}).
Select("DATE(created_at) as date, SUM(amount) as total_sales, COUNT(*) as order_count").
Where("status = ?", "completed").
Group("DATE(created_at)").
Having("SUM(amount) > ?", 1000).
Order("date DESC").
Scan(&report)子查询示例
go
// EXISTS subquery
q := orm.NewQuery[models.User]().
WhereExists(func(sq *gorm.DB) *gorm.DB {
return sq.Table("orders").
Where("orders.user_id = users.id").
Where("orders.status = ?", "completed")
})
// IN subquery
q := orm.NewQuery[models.Product]().
WhereInSubquery("category_id", func(sq *gorm.DB) *gorm.DB {
return sq.Table("categories").
Select("id").
Where("is_active = ?", true)
})
// NOT EXISTS subquery
q := orm.NewQuery[models.User]().
WhereNotExists(func(sq *gorm.DB) *gorm.DB {
return sq.Table("orders").
Where("orders.user_id = users.id").
Where("orders.created_at > ?", time.Now().AddDate(0, -6, 0))
})