条件构建器
VEF Framework 提供了丰富的条件构建器方法,用于构建复杂的查询条件。
基本条件方法
相等条件
go
import "github.com/ilxqx/vef-framework-go/orm"
// Where equal
q := orm.NewQuery[models.User]().
Where("username", "john")
// Where with operator
q := orm.NewQuery[models.User]().
Where("age", ">", 18)不等条件
go
q := orm.NewQuery[models.User]().
WhereNot("status", "deleted")
// Or using operator
q := orm.NewQuery[models.User]().
Where("status", "<>", "deleted")NULL 条件
go
// IS NULL
q := orm.NewQuery[models.User]().
WhereNull("deleted_at")
// IS NOT NULL
q := orm.NewQuery[models.User]().
WhereNotNull("email")范围条件
IN 条件
go
q := orm.NewQuery[models.User]().
WhereIn("id", []string{"id1", "id2", "id3"})
// NOT IN
q := orm.NewQuery[models.User]().
WhereNotIn("status", []string{"deleted", "banned"})BETWEEN 条件
go
q := orm.NewQuery[models.User]().
WhereBetween("age", 18, 65)
// Date range
q := orm.NewQuery[models.User]().
WhereBetween("created_at", startDate, endDate)字符串匹配
LIKE 条件
go
// Contains
q := orm.NewQuery[models.User]().
WhereLike("username", "%john%")
// Starts with
q := orm.NewQuery[models.User]().
WhereLike("email", "admin%")
// Ends with
q := orm.NewQuery[models.User]().
WhereLike("email", "%@example.com")不区分大小写匹配
go
q := orm.NewQuery[models.User]().
WhereILike("username", "%john%")逻辑组合
OR 条件
go
q := orm.NewQuery[models.User]().
Where("status", "active").
OrWhere("is_admin", true)
// SQL: WHERE status = 'active' OR is_admin = true条件分组
go
q := orm.NewQuery[models.User]().
Where("is_active", true).
WhereGroup(func(q *orm.Query[models.User]) *orm.Query[models.User] {
return q.Where("role", "admin").OrWhere("role", "manager")
})
// SQL: WHERE is_active = true AND (role = 'admin' OR role = 'manager')复杂条件组合
go
q := orm.NewQuery[models.User]().
Where("department_id", deptId).
WhereGroup(func(q *orm.Query[models.User]) *orm.Query[models.User] {
return q.
WhereGroup(func(q *orm.Query[models.User]) *orm.Query[models.User] {
return q.Where("role", "admin").Where("level", ">", 5)
}).
OrWhereGroup(func(q *orm.Query[models.User]) *orm.Query[models.User] {
return q.Where("is_super", true)
})
})
// SQL: WHERE department_id = ? AND ((role = 'admin' AND level > 5) OR (is_super = true))日期条件
日期比较
go
q := orm.NewQuery[models.User]().
WhereDate("created_at", "2024-01-01")
// SQL: WHERE DATE(created_at) = '2024-01-01'日期范围
go
q := orm.NewQuery[models.User]().
WhereDateBetween("created_at", "2024-01-01", "2024-12-31")
// SQL: WHERE DATE(created_at) BETWEEN '2024-01-01' AND '2024-12-31'时间段查询
go
// Today
q := orm.NewQuery[models.User]().
WhereDate("created_at", time.Now().Format("2006-01-02"))
// This month
q := orm.NewQuery[models.User]().
WhereMonth("created_at", time.Now().Month()).
WhereYear("created_at", time.Now().Year())JSON 字段条件
JSON 路径查询
go
// Query JSON field
q := orm.NewQuery[models.User]().
WhereJsonContains("settings", "notifications", true)
// SQL: WHERE JSON_CONTAINS(settings, 'true', '$.notifications')JSON 数组查询
go
q := orm.NewQuery[models.User]().
WhereJsonContains("tags", "vip")
// SQL: WHERE JSON_CONTAINS(tags, '"vip"')子查询条件
EXISTS 子查询
go
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")
})
// SQL: WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = users.id AND orders.status = 'completed')IN 子查询
go
q := orm.NewQuery[models.User]().
WhereInSubquery("department_id", func(sq *gorm.DB) *gorm.DB {
return sq.Table("departments").
Select("id").
Where("is_active = ?", true)
})
// SQL: WHERE department_id IN (SELECT id FROM departments WHERE is_active = true)原始 SQL 条件
使用原始 SQL
go
q := orm.NewQuery[models.User]().
WhereRaw("YEAR(created_at) = ?", 2024)
// SQL: WHERE YEAR(created_at) = 2024复杂原始条件
go
q := orm.NewQuery[models.User]().
WhereRaw("(age > ? AND status = ?) OR is_vip = ?", 18, "active", true)条件构建器方法参考
| 方法 | 说明 |
|---|---|
Where(column, value) | 等于条件 |
Where(column, op, value) | 带操作符的条件 |
WhereNot(column, value) | 不等于条件 |
WhereNull(column) | IS NULL |
WhereNotNull(column) | IS NOT NULL |
WhereIn(column, values) | IN 条件 |
WhereNotIn(column, values) | NOT IN 条件 |
WhereBetween(column, v1, v2) | BETWEEN 条件 |
WhereLike(column, pattern) | LIKE 条件 |
WhereILike(column, pattern) | 不区分大小写 LIKE |
OrWhere(column, value) | OR 条件 |
WhereGroup(fn) | 条件分组 |
WhereRaw(sql, args...) | 原始 SQL 条件 |
WhereExists(fn) | EXISTS 子查询 |
WhereDate(column, date) | 日期条件 |
WhereDateBetween(column, d1, d2) | 日期范围 |