Merge pull request #21 from mikkelu/feature/advanced-queries Feature: Advanced queries
Merge pull request #21 from mikkelu/feature/advanced-queries
Feature: Advanced queries
Pagination is based off of the Fluent 2 pagination system.
Add this to your Package.swift file
.package(url: "https://github.com/vapor-community/pagination.git", from: "1.0.0")
Conform your model to Paginatable
Paginatable
extension MyModel: Paginatable { }
Once you have done that, it’s as simple as returning your query in paginated format.
func test(_ req: Request) throws -> Future<Paginated<MyModel>> { return try MyModel.query(on: req).paginate(for: req) }
Even return items off of the query builder
func test(_ req: Request) throws -> Future<Paginated<MyModel>> { return try MyModel.query(on: req).filter(\MyModel.name == "Test").paginate(for: req) }
Making a request with the parameters is easy is appending ?page= and/or ?per=
?page=
?per=
curl "http://localhost:8080/api/v1/models?page=1&per=10"
A response looks like this
{ "data": [{ "updatedAt": "2018-03-07T00:00:00Z", "createdAt": "2018-03-07T00:00:00Z", "name": "My Test Model" }], "page": { "position": { "current": 1, "max": 1 }, "data": { "per": 10, "total": 2 } } }
Vapor Pagination
Pagination is based off of the Fluent 2 pagination system.
Getting Started
Add this to your Package.swift file
Conform your model to
PaginatableOnce you have done that, it’s as simple as returning your query in paginated format.
Even return items off of the query builder
Making a request with the parameters is easy is appending
?page=and/or?per=A response looks like this