Gorm plugin to add Pagination to your select queries
go get -u -v github.com/manuelarte/pagorminator// Initialize GORM with PaGorminator plugin
db, err := gorm.Open(sqlite.Open("file:mem?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
    panic("failed to connect database")
}
db.Use(pagorminator.PaGorminator{})
// Create a page request (page 0, size 10)
pageRequest, err := pagorminator.NewPageRequest(0, 10)
if err != nil {
    // Handle error
}
// Apply pagination to your query
var products []*Product
db.Clauses(pageRequest).Find(&products)
// Access pagination information
fmt.Printf("Total elements: %d\n", pageRequest.GetTotalElements())
fmt.Printf("Total pages: %d\n", pageRequest.GetTotalPages())The pagination struct contains the following data:
- page: page number, e.g.- 0(zero-based indexing)
- size: page size, e.g.- 10
- sort: to apply sorting, e.g.- id desc
The plugin will automatically calculate the total amount of elements.
The pagination instance provides GetTotalElements() and GetTotalPages() methods to retrieve the total counts.
The pagination starts at index 0, e.g., if the total pages is 6, then the pagination index goes from 0 to 5.
You can add sorting to your pagination request:
// Single sort criterion
pageRequest, err := pagorminator.NewPageRequest(0, 10, 
    pagorminator.MustOrder("id", pagorminator.DESC))
// Multiple sort criteria
pageRequest, err := pagorminator.NewPageRequest(0, 10, 
    pagorminator.MustOrder("name", pagorminator.ASC),
    pagorminator.MustOrder("id", pagorminator.DESC))If you want to retrieve all records without pagination:
// Create an unpaged request
unpaged := pagorminator.UnPaged()
db.Clauses(unpaged).Find(&products)You can enable debug mode to see the SQL queries:
// Enable debug mode
db.Use(pagorminator.PaGorminator{Debug: true})Check the examples in the ./examples folder for more detailed usage patterns.
