With polymorphic associations, a model can belong to more than one other model, on a single association. For example, you might have a photo model that belongs to either a `Site` model or a `Post` model. Here’s how this could be declared: var Site = bookshelf.Model.extend({ tableName: 'sites', photo: function() { return this.morphOne(Photo, 'imageable'); } }); var Post = bookshelf.Model.extend({ tableName: 'posts', photos: function() { return this.morphMany(Photo, 'imageable'); } }); var Photo = bookshelf.Model.extend({ tableName: 'photos', imageable: function() { return this.morphTo('imageable', Site, Post); } }); Optionally, if you wish to use column names other than the `name` suffixed with `_type` and `_id` (for example, if you use a different naming convention in your database), you may specify custom `columnNames`. This argument, when specified, expects an array containing the substitute `_type` and `_id` columns, respectively. Note that any custom `columnNames` must be specified on both ends of the relationship! Examples are provided for each of the polymorphic relationship types individually.