attach(ids, options) {
    return Promise.try(() => this.triggerThen('attaching', this, ids, options))
      .then(() => this._handler('insert', ids, options))
      .then((response) => this.triggerThen('attached', this, response, options))
      .return(this);
  }
Attaches one or more `ids` or models from a foreign table to the current
table, on a {@linkplain many-to-many} relation. Creates and saves a new
model and attaches the model with the related model.

    var admin1 = new Admin({username: 'user1', password: 'test'});
    var admin2 = new Admin({username: 'user2', password: 'test'});

    Promise.all([admin1.save(), admin2.save()])
      .then(function() {
        return Promise.all([
        new Site({id: 1}).admins().attach([admin1, admin2]),
        new Site({id: 2}).admins().attach(admin2)
      ]);
    })

This method (along with {@link Collection#detach} and {@link
Collection#updatePivot}) are mixed in to a {@link Collection} when
returned by a {@link Model#belongsToMany belongsToMany} relation.

@method Collection#attach
@param {mixed|mixed[]} ids
  One or more ID values or models to be attached to the relation.
@param {Object} options
  A hash of options.
@param {Transaction} options.transacting
  Optionally run the query in a transaction.
@returns {Promise<Collection>}
  A promise resolving to the updated Collection where this method was called.