Categorygithub.com/go-cinch/common/page
modulepackage
1.0.4
Repository: https://github.com/go-cinch/common.git
Documentation: pkg.go.dev

# README

Page

simple page with gorm, find multiple pieces of data is helpful.

Usage

go get -u github.com/go-cinch/common/page

Field

  • Num - current page
  • Size - page per count
  • Total - all data count
  • Disable - disable pagination, query all data
  • Count - not use 'SELECT count(*) FROM ...' before 'SELECT * FROM ...'
  • Primary - When there is a large amount of data, limit is optimized by specifying a field (the field is usually self incremented ID or indexed), which can improve the query efficiency (if it is not transmitted, it will not be optimized)

Find

count and data

func (ro roleRepo) Find(ctx context.Context, condition *biz.FindRole) (rp []biz.Role) {
	db := ro.data.DB(ctx)
	db = db.
		Model(&Role{}).
		Order("id DESC")
	rp = make([]biz.Role, 0)
	condition.Page.
		WithContext(ctx).
		Query(db).
		Find(&list)
	copierx.Copy(&rp, list)
	return
}

sql log:

SELECT count(*) FROM `role`;
SELECT `role`.`id`,`role`.`name`,`role`.`word`,`role`.`action` FROM `role` ORDER BY id DESC LIMIT 20;

only data

func (ro roleRepo) Find(ctx context.Context, condition *biz.FindRole) (rp []biz.Role) {
	db := ro.data.DB(ctx)
	db = db.
		Model(&Role{}).
		Order("id DESC")
	rp = make([]biz.Role, 0)
	condition.Page.Count = true
	condition.Page.
		WithContext(ctx).
		Query(db).
		Find(&list)
	copierx.Copy(&rp, list)
	return
}

sql log:

SELECT `role`.`id`,`role`.`name`,`role`.`word`,`role`.`action` FROM `role` ORDER BY id DESC LIMIT 20;

all data

func (ro roleRepo) Find(ctx context.Context, condition *biz.FindRole) (rp []biz.Role) {
	db := ro.data.DB(ctx)
	db = db.
		Model(&Role{}).
		Order("id DESC")
	rp = make([]biz.Role, 0)
	condition.Page.Disable = true
	condition.Page.
		WithContext(ctx).
		Query(db).
		Find(&list)
	copierx.Copy(&rp, list)
	return
}

sql log:

SELECT `role`.`id`,`role`.`name`,`role`.`word`,`role`.`action` FROM `role` ORDER BY id DESC;

limit optimize

func (ro roleRepo) Find(ctx context.Context, condition *biz.FindRole) (rp []biz.Role) {
	db := ro.data.DB(ctx)
	db = db.
		Model(&Role{}).
		Order("id DESC")
	rp = make([]biz.Role, 0)
	condition.Page.Primary = "id"
	condition.Page.
		WithContext(ctx).
		Query(db).
		Find(&list)
	copierx.Copy(&rp, list)
	return
}

sql log:

SELECT count(*) FROM `role`;  
SELECT `role`.`id`,`role`.`name`,`role`.`word`,`role`.`action` FROM `role` JOIN (SELECT `role`.`id` AS `OFFSET_KEY` FROM `role` ORDER BY id DESC LIMIT 1) AS `OFFSET_T` ON `role`.`id` = `OFFSET_T`.`OFFSET_KEY` ORDER BY id DESC;

example from auth.Role.Find

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

Page array data page info.
No description provided by the author