Bookshelf-Scopes
Giving you Rails like scopes in Bookshelf.js. This was originally a PK4Media project but I moved it over to my account as they do not use it anymore.
If you add in the plugin like so:
var bookshelf = knex; bookshelf;
You will then be able to add a scopes property on your models that will give you a Knex query builder as the first argument and then followed by any additional arguments. See examples below.
Also just like rails we can set a default. See examples below.
Examples
Simple
You can define a model with scopes and an active function like this:
var TestModel = bookshelfModel;
You can now run code like this to get all Active:
TestModel;
You can also get all active where name contains test as well:
TestModel;
Default
You can define a model with scopes and default like this:
var TestModel = bookshelfModel;
Now if you call fetchAll or fetch on any of your queries you will only get items that have archive set to 0:
TestModel;
If you need to query without the default scope you can call unscoped like so:
TestModel;
Combine Methods In Scope
You can define a bunch of scope functions you can also combine them in another scope function.
var TestModel = bookshelfModel;
Now you can use the combined scope method as well to make things more readable.
TestModel;
Scopes on Relationships
You can also use scopes in the relationships as well. So you could have a model like this:
var TestModel = bookshelfModel;
And then you can have a model that has many active models above as children like so:
var MyModel = bookshelfModel;
Override Initialize
If in your model you set an initialize you will need to call addScope() to add default scope if you want it
var TestModel = bookshelfModel;
Then calls to fetchAll will include it.
TestModel;