objection-dynamic-finder
v0.1.4
Published
Dynamic finders for Objection.js
Downloads
36
Maintainers
Readme
objection-dynamic-finder
An Objection.js plugin for using convenient finders inspired by Rails's dynamic finders.
Examples
Person.query().finder.firstNameAndLastName('John', 'Smith')
// => Person.query().where('first_name', 'John').where('last_name', 'Smith')
Person.query().finder.isDisabledOrStatus(true, 'failed')
// => Person.query().where('is_disabled', true).orWhere('status', 'failed')
Person.query().finder.firstNameOrFail('Jane')
// If no model is returned, throws an error (uses throwIfNotFound() in Objection > 0.8.1)
Person.query().finder.firstNameAndNonExistingField('foo')
// => Error 'Querying invalid field: non_existing_field'
// The query fields will be validated against Person model's jsonSchema, if it has one.
Person.query().avg('income').finder.lastNameAndCountry('Smith', 'USA').where('age', '<', 30)
// Finders can be chained with all other QueryBuilder methods.
Installation
Due to Babel not handling the Proxy object, this plugin is only compatible with Node versions >= 6.0.0.
Add the objection-dynamic-finder
package via your preferred package manager:
npm install --save objection-dynamic-finder
Usage
See Objection.js docs on using plugins. Once the plugin is applied to a Model class, that class can use .finder
in queries.
const Finder = require('objection-dynamic-finder')
const Model = require('objection').Model
class Person extends Finder(Model) {
// ...
}
Validation Using jsonSchemas
If a class has a jsonSchema property defined then the fields in the finder will be validated against the schema to make sure they exist on the model. Make sure the schema is up to date! CamelCase and snake_case property names are both supported.
Contributing
Contributions are always welcome. You are encouraged to open issues and merge requests.
To run the tests, use npm run test
.