代码拉取完成,页面将自动刷新
package base
import (
"context"
"gorm.io/gorm"
"gorm.io/gorm/schema"
"sync"
)
const MaxPageSize = 10000
type Pagination[T schema.Tabler] struct {
once sync.Once
Query *gorm.DB
Error error
Size int
Page int
total int64
items []T
}
func (p *Pagination[T]) Total() int64 {
return p.total
}
func (p *Pagination[T]) Items() []T {
return p.items
}
func (p *Pagination[T]) Load() *Pagination[T] {
p.once.Do(func() {
if p.Size == 0 {
p.Page = 1
p.Size = MaxPageSize
}
query := p.Query
if p.Query.Statement.Model == nil {
var t T
query = query.Model(t).Table(t.TableName() + " AS Main")
} else {
query = query.Table(query.Statement.Model.(schema.Tabler).TableName() + " AS Main")
}
p.Error = query.WithContext(context.Background()).Count(&p.total).Error
if p.Error != nil {
return
}
page := p.Page - 1
if page < 0 {
page = 0
}
offset := page * p.Size
p.Error = query.WithContext(context.Background()).Offset(offset).Limit(p.Size).Find(&p.items).Error
})
return p
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。