Change Log
0.10.4 - Jul 17, 2017 — Diff
- Allow knex 0.13.x
- Use uuid instead of node-uuid
- Test Bookshelf with Node v7
- Updated Author info in package.json
- Remove lodash from build script
- Add OracleDB integration tests
- Add opportunity to override
visible
andhidden
behaviour for toJSON function - Do not load belongsTo if foreignKey is null
- Optimise
timestamp
function: respect updated_at/created_at being part of the query - Fix
fetchPage
on Collection (pagination plugin) - Fixing virtuals when
omitNew=true
- Lot's of typo fixes and documentation updates
0.10.3 - Jan 21, 2017 — Diff
- Drop Node support for 0.10 and 0.12
- Trigger creating event for attached models
- Add support for uninstantiated models relations
- Add foreignKeyTarget to relation methods
0.10.2 - Sept 22, 2016 — Diff
- Fixes memory leak introduced in 0.10.0 caused by binding
this.listeners
intriggerThen
- Fixes Bluebird warning when a Promise was internally rejected with a non-error
0.10.1 - Sept 14, 2016 — Diff
- Allows using knex 0.12 as a peerDependency
- knex instance used by bookshelf may be swapped out
0.10.0 — Jun 29, 2016 — Diff
Breaking Changes:
- Removal/renaming of certain lodash functions from Model and Collection that were removed in lodash 4.
- Collection Methods
- removed
CollectionBase#collect
=> useCollectionBase#map
instead - removed
CollectionBase#foldl
=> useCollectionBase#reduce
instead - removed
CollectionBase#inject
=> useCollectionBase#reduce
instead - removed
CollectionBase#foldr
=> useCollectionBase#reduceRight
instead - removed
CollectionBase#detect
=> useCollectionBase#find
instead - removed
CollectionBase#select
=> useCollectionBase#filter
instead - removed
CollectionBase#all
=> useCollectionBase#every
instead - removed
CollectionBase#any
=> useCollectionBase#some
instead - removed
CollectionBase#include
=> useCollectionBase#includes
instead - removed
CollectionBase#contains
=> useCollectionBase#includes
instead - removed
CollectionBase#rest
=> useCollectionBase#tail instead
- renamed
CollectionBase#invoke
=>CollectionBase#invokeMap
- split
CollectionBase#max
intoCollectionBase#maxBy
- see the lodash docs for more explanation - split
CollectionBase#min
intoCollectionBase#minBy
- see the lodash docs for more explanation
- removed
- Model Methods
- renamed
ModelBase#pairs
=>ModelBase#toPairs
- renamed
- Collection Methods
Other Changes:
- Update to Lodash 4. #1287
- Registry plugin: Better support for custom relations. #1294
0.9.5 — May 15, 2016 — Diff
- Add pagination plugin. #1183
- Fire {@link Model#event:fetched} on eagerly loaded relations. #1206
- Correct cloning of {@link Model#belongsToMany} decorated relations. #1222
- Update Knex to 0.11.x. #1227
- Update minimum lodash version. #1230
0.9.4 — April 3, 2016 — Diff
- Include
babel-runtime
as a dependency. #1188
0.9.3 — April 3, 2016 — Diff
- Bugfix: Restore support for
camelCase
andcolor:separated
event names. #1184
0.9.2 — February 17, 2016 — Diff
- Permit up to Knex 0.11.0 via
peerDependencies
. -
Model.forge
works for ES6 classes. #924 - Fix
Collection#count
forhasMany
relations. #1115
0.9.1 — November 4, 2015 — Diff
- {@link Events#off} can now deregister multiple methods at once. #983
- Permit Knex 0.10.0 via
peerDependencies
. #998
0.9.0 — November 1, 2015 — Diff
- Repo no longer includes built source or generated documentation. Release script updated to include these only in the tagged release commit. #950.
- {@link Model#previous} returned
undefined
instead ofnull
for non-existant attributes. - Update tests and documentation to confirm that
null
(rather thanundefined
) is returned from {@link Model#fetch} and {@link Collection#fetchOne}. - Fix error in virtual plugin - #936
- Correct error updating parsed/formatted {@link Model#idAttribute} after successful
insert
operation. #955 - Many documentation fixes.
0.8.2 — August 20, 2015 — Diff
- ES6/7: Move code base to
/src
— code is now compiled into/lib
via Babel. - Add
collection.count
,model.count
andModel.count
. - Add
model.refresh
. #796 - Prevent
fetch
andrefresh
from trying to add JSON attributes to awhere
clause. #550 #778 - Virtuals plugin now supports
{patch: true}
argument tomodel.save
. #542 - Restored
model.clone
andcollection.clone
, which were not previously working. #744 - Allow
bookshelf.Collection
to be modified and extended by plugins (so that relations andfetchAll
operations will return the extended instance). #681 #688 - Fix
model.timestamps
behaviour which deviated from documentation. Also ensure thatcreatedAt
is set when{method: "insert"}
is passed explicitly. #787 - Calling
create
on athrough
relationship no longer tries to make a pivot object. Previously this would attempt to create an object with invalid foreign keys. #768 - Parse foreign keys set during
create
in a relation. #770
0.8.1 — May 12, 2015 — Diff
- Fix for regression in
initialize
not being called in Collection constructor, #737. - Fix for regression, removing
omitPivot
in 0.8 #721 - Added
serialize
, a method which contains toJSON logic for easier customization.
0.8.0 — May 1, 2015 — Diff
- Dropped Backbone dependency
- More specific errors throughout, #522
- Support {require: true} for model.destroy #617
- Add lifecycle events on pivot models for belongsToMany, .through #578
- Allows for select/column calls in the query builder closure, #633.
- Added per-constructor error classes #694 (note: this will not work in CoffeeScript).
Breaking Changes:
- Removed the
__super__
internal property on the constructor, this shouldn't have been something you were relying on anyway.
0.7.9 — Oct 28, 2014 — Diff
- Fix for regression in columns / eager fetch query constraints, (#510).
0.7.8 — Oct 28, 2014 — Diff
- Timestamp
created_at
is now saved with any insert. - Fix for regression created by #429.
- New events,
attaching
,attached
,detaching
,detached
#452. - Ability to specify custom column names in morphTo, #454
- Fix for stack overflow with model list as arguments, #482
- Modified location of eager fetch query constraints internally.
0.7.7 — July 23, 2014 — Diff
- Fix for formatting on polymorphic keys, (#429).
- Added a resolve method for specifying a custom resolver function for the registry plugin.
0.7.6 — June 29, 2014 — Diff
Add omitPivot
flag on toJSON options for omitting the _pivot_
keys in through
and belongsToMany
relations (#404).
0.7.5 — June 23, 2014 — Diff Fix missing NotFoundError & EmptyError on Model & Collection, respectively (#389, 399).
0.7.4 — June 18, 2014 — Diff
Added bookshelf.model(name, protoProps, [staticProps])
syntax for registry plugin.
0.7.3 — June 17, 2014 — Diff Fix for collection dropping models early in set, #376.
0.7.2 — June 12, 2014 — Diff
Pass a cloned copy of the model's attributes to format
rather than the original, related to #315.
0.7.1 — June 10, 2014 — Diff Ensure the knex version >= 0.6.10, where a major regression affecting column names was fixed.
0.7.0 — June 9, 2014
- Added {@link Model#fetchAll}, for fetching a collection of models from a model.
- Added {@link Model#where}, as a shortcut for the most commonly used {@linkplain Model#query query method}.
- Initializing via a plain options object is deprecated, you must now pass in an initialized knex instance.
- Adding typed errors (#221).
- Upgrade to support knex 0.6.x
0.6.12 — June 5, 2014 — Diff Fix for eager loaded belongsTo relation bug with custom parse/format (#377).
0.6.11 — June 4, 2014 — Diff
Temporarily add knex to peerDependencies
until 0.7 is released to support knex 0.6 and there exists a better internal method of doing a semver check. Fix for belongsTo relation bug (#353).
0.6.10 — April 3, 2014 — Diff
- Bumping dependencies, including upgrading to Bluebird 1.2, trigger-then 0.3, fixing an erroneous "unhandledRejection" (#310).
-
fetchOne
properly resets the query on the collection, (#300).
0.6.9 — April 3, 2014 — Diff Only prefix model fields with the "tableName" after format has been called, (#308).
0.6.8 — March 6, 2014 — Diff
- Virtuals plugin may now accept a hash of attributes to set.
- Properly fix issue addressed in 0.6.7.
0.6.7 — March 2, 2014 — Diff
Bugfix for edge case for eager loaded relations and relatedData
settings.
0.6.6 — March 1, 2014 — Diff Bugfix for registry plugin, resolving correct models for "through" relations. (#260)
0.6.5 — February 28, 2014 — Diff
- Added {@link Collection#reduceThen} as a passthrough to Bluebird's "reduce" method with models.
- Options are now passed to "plugin" method. (#254)
- Bugfix for registry plugin. (#259)
0.6.4 — February 11, 2014 — Diff Adds static method {@link Model.collection Model.collection()} as a shortcut for creating a collection with the current model.
0.6.3 — February 9, 2014 — Diff
- Added an
Relation#updatePivot
method for updating tables on a "belongsToMany" relation. (#134, #230) - Allow mutating the options for passing constraints to eager loaded relations. (#151)
- All keys of an object passed into sync are properly prefixed before sync. (#177)
- Clearer error messages for debugging. (#204, #197)
- Fixed error message for updates that don't affect rows. (#228)
- Group by the correct key on "belongsTo.through" relations. (#214)
- Ability to only use
created_at
orupdated_at
as timestamp properties. (#158) - Numerous documentation corrections, clarifications, enhancements.
- Bumped Bluebird dependency to ~1.0.0.
Plugins:
- Added the
registry
plugin for registering models as strings, helping with the circular dependency problem - Added the
virtuals
plugin for getting/setting virtual (computed) properties on the model. - Added the
visibility
plugin for specifying a whitelist/blacklist of keys when a model is serialized with toJSON.
0.6.2 — December 18, 2013 — Diff
- Debug may now be passed as an option in any sync method, to log queries, including relations.
- Save now triggers an error in updates with no affected rows. (#119)
- The
model.id
attribute is only set on insert if it's empty. (#130) - Ensure eager loaded relations can use attach/detach. (#120)
0.6.1 — November 26, 2013 — Diff Fixes bug with promise code and saving event firing, where promises are not properly resolved with ".all" during saving events.
0.6.0 — November 25, 2013 — Diff
- Updating dependency to knex.js 0.5.x
- Switched from when.js to bluebird for promise implementation, with shim for backward compatibility.
- Switched from underscore to lodash, for semver reliability.
0.5.8 — November 24, 2013 — Diff
- Parse models after all relations have been eager loaded, for appropriate column name matching (thanks @benesch) (#97)
- Specify table for
withRelated
fetches to prevent column naming conflicts (#96). - Fix for polymorphic relation loading (#95).
- Other documentation tweaks and other internal code cleanup.
0.5.7 — October 11, 2013 — Diff The "fetching" event is now fired on eager loaded relation fetches.
0.5.6 — October 10, 2013 — Diff
The options.query
now contains the appropriate knex
instance during the "fetching" event handler.
0.5.5 — October 1, 2013 — Diff An eager loaded morphTo relation may now have child relations nested beneath it that are properly eager loaded, depending on the parent.
0.5.4 — October 1, 2013 — Diff
- Fix issue where the
relatedData
context was not appropriately maintained for subsequent {@link Collection#create} calls after an eager load (#77). - Documentation improvements, encouraging the use of {@link Model#related} rather than calling a relation method directly, to keep association with the parent model's {@link Model#relations relations} hash.
0.5.3 — September 26, 2013 — Diff
The columns
explicitly specified in a fetch are no-longer passed along when eager loading relations, fixes (#70).
0.5.2 — September 22, 2013 — Diff
Fixed incorrect eager loading in belongsTo
relations (#65).
0.5.1 — September 21, 2013 — Diff
Fixed incorrect eager loading in hasOne
relations (#63).
0.5.0 — September 20, 2013 — Diff Major Breaking Changes:
- Global state is no longer stored in the library, an instance is returned from
Bookshelf.initialize
, so you will need to call this once and then reference thisBookshelf
client elsewhere in your application. - Lowercasing of
bookshelf.initialize
,bookshelf.knex
,bookshelf.transaction
. - During the lifecycle events, such as "fetching", "saving", or "destroying", the model no-longer contains the active query builder instance at the time it is saved. If you need to modify the query builder chain inside of an event handler, you may now use
options.query
inside the event handlers.
Other Changes:
- Added
tableName
for all queries, so joins use the correct id (#61). - The
attach
&detach
now remove models from the associated collection, as appropriate (#59). - A
withPivot
no longer accepts an object to specify the keys for the returned pivot items, if you wish to specify how these pivot objects are defined on the object, a custom toJSON is your best bet. - Added {@link Collection#invokeThen} and {@link Collection#mapThen} as convenience helpers for
Promise.all(collection.invoke(method, args*))
andPromise.all(collection.map(method, iterator, [context]))
, respectively. - Added a
Bookshelf.plugin
method, for a standard way to extend Bookshelf instances. - A re-written modular architecture, to move the library toward becoming a database agnostic "data mapper" foundation, with the ablitiy to form relations between different data stores and types, not just SQL (although SQL is the primary focus for now). Also, support for AMD, for eventual use outside of Node.js runtime (with webSQL and likewise).
0.3.1 — August 29, 2013 — Diff — Docs
Fixed regression in belongsToMany
custom column name order.
0.3.0 — August 28, 2013
Support for a {@link Model#through} clause on various model relations. Creating a model from a related collection maintains the appropriate relation data (#35). Support for a {patch: true}
flag on save, to only update specific saved attributes. Added a fetchOne
method, for pulling out a single model from a collection, mostly useful for related collection instances. Updated to Knex "0.2.x" syntax for insert / returning, Ability to specify a morphValue
on {@link Model#morphOne} or {@link Model#morphMany} relations. Internal refactor of relations for more consistent behavior.
0.2.8 — August 26, 2013
Some minor fixes to make the Sync
methods more consistent in their behavior when called directly, (#53).
0.2.7 — August 21, 2013
Timestamp for created_at
is not set during an "update" query, and the update where clause does not include the idAttribute
if it isn't present (#51).
0.2.6 — August 21, 2013
Fixes bug with query function feature added in 0.2.5
, mentioned in (#51).
0.2.5 — August 19, 2013 The {@link Model#query} method may now accept a function, for even more dynamic query building (#45). Fix for relations not allowing "0" as a valid foreign key value (#49).
0.2.4 — July 30, 2013
More consistent query resetting, fixing query issues on post-query event handlers. The toJSON
is only called on a related model if the method exists, allowing for objects or arrays to be manually specified on the relations
hash and serialized properly on the parent's toJSON
.
0.2.3 — July 7, 2013
Fixing bug where triggerThen
wasn't actually being used for several of the events as noted in 0.2.1 release.
0.2.2 — July 2, 2013
The Model's related
method is now a no-op if the model doesn't have the related method. Any withPivot
columns on many-to-many relations are now prefixed with _pivot
rather than pivot
unless named otherwise, for consistency. The _reset
is not called until after all triggered events so that hasChanged
can be used on the current model state in the "created", "updated", "saved", and "destroyed" events. Eager queries may be specified as an object with a function, to constrain the eager queries:
user.fetch({withRelated: ['accounts', {
'accounts.settings': function(qb) { qb.where('status', 'enabled'); }
}, 'other_data']}).then(...
0.2.1 — June 26, 2013
Using triggerThen
instead of trigger
for "created", "updated", "saved", "destroyed", and "fetched" events - if any async operations are needed after the model is created but before resolving the original promise.
0.2.0 — June 24, 2013
Resolve Model's fetch
promise with null
rather than undefined. An object of query
. constraints (e.g. {where: {...}, orWhere: {...}}
may be passed to the query method (#30). Fix for empty eager relation responses not providing an empty model or collection instance on the model.relations
object.
0.1.9 — June 19, 2013
Resolve Model's fetch
promise with undefined
if no model was returned. An array of "created at" and "updated at" values may be used for hasTimestamps
. Format is called on the Model#fetch
method. Added an exec
plugin to provide a node callback style interface for any of the promise methods.
0.1.8 — June 18, 2013
Added support for polymorphic associations, with morphOne
, morphMany
, and morphTo
model methods.
0.1.7 — June 15, 2013
Bugfix where detach
may be used with no parameters to detach all related items (#19).
0.1.6 — June 15, 2013
Fixing bug allowing custom idAttribute
values to be used in eager loaded many-to-many relations (#18).
0.1.5 — June 11, 2013
Ensuring each of the _previousAttribute
and changed
values are properly reset on related models after sync actions.
0.1.4 — June 10, 2013
Fixing issue with idAttribute
not being assigned after database inserts. Removing various aliases {@link Events} methods for clarity.
0.1.3 — June 10, 2013
Added {@link Model#hasChanged}, {@link Model#previous}, and {@link Model#previousAttributes} methods, for getting the previous value of the model since the last sync. Using Object.create(null)
for various internal model objects dealing with user values. Calling {@link Model#related} on a model will now create an empty related object if one is not present on the relations
object. Removed the {patch: true}
option on save, instead only applying defaults if the object isNew
, or if {defaults: true}
is passed. Fix for model.clone
's relation responses.
0.1.2 — May 17, 2013
Added triggerThen
and emitThen
for promise based events, used internally in the "creating", "updating", "saving", and "destroying" events. Docs updates, fixing {patch: true}
on update
to have intended functionality. A model's toJSON
is now correctly called on any related properties.
0.1.1 — May 16, 2013
Fixed bug with eager loaded belongsTo
relations (#14).
0.1.0 — May 13, 2013 Initial Bookshelf release.