through(Interim, throughForeignKey, otherKey, throughForeignKeyTarget, otherKeyTarget) {
      return this.relatedData.through(this, Interim, {
        throughForeignKey,
        otherKey,
        throughForeignKeyTarget,
        otherKeyTarget
      });
    }
Helps to create dynamic relations between {@link Model models} where a {@link Model#hasOne hasOne} or
{@link Model#belongsTo belongsTo} relation may run through another `Interim` model. This is exactly like the
equivalent {@link Collection#through collection method} except that it applies to the models that the above
mentioned relation methods return instead of collections.

This method creates a pivot model, which it assigns to {@link Model#pivot model.pivot} after it is created. When
serializing the model with {@link Model#toJSON toJSON}, the pivot model is flattened to values prefixed with
`_pivot_`.

A good example of where this would be useful is if a paragraph {@link Model#hasMany belongsTo} a book *through* a
chapter. See the example above on how this can be expressed.

@method Model#through
@example
const Chapter = bookshelf.model('Chapter', {
  tableName: 'chapters',
  paragraphs() {
    return this.hasMany('Paragraph')
  }
})
const Book = bookshelf.model('Book', {
  tableName: 'books',
  chapters() {
    return this.hasMany('Chapter')
  }
})

     const Paragraph = bookshelf.model('Paragraph', {
  tableName: 'paragraphs',
  chapter() {
    return this.belongsTo('Chapter')
  },

  // Find the book where this paragraph is included, by passing through
  // the "Chapter" model.
  book() {
    return this.belongsTo('Book').through('Chapter')
  }
})

@param {Model|string} Interim
  Pivot model. Can be a string specifying a previously registered model with {@link Bookshelf#model}.
@param {string} [throughForeignKey]
  Foreign key in this model. By default, the foreign key is assumed to be the singular form of the `Target`
  model's tableName, followed by `_id` or `_{{{@link Model#idAttribute idAttribute}}}`.
@param {string} [otherKey]
  Foreign key in the `Interim` model. By default, the other key is assumed to be the singular form of this
  model's tableName, followed by `_id` / `_{{{@link Model#idAttribute idAttribute}}}`.
@param {string} [throughForeignKeyTarget]
  Column in the `Target` model which `throughForeignKey` references, if other than `Target` model's `id` /
  `{@link Model#idAttribute idAttribute}`.
@param {string} [otherKeyTarget]
  Column in this model which `otherKey` references, if other than `id` / `{@link Model#idAttribute idAttribute}`.
@returns {Model} The related but empty Model.