public function save( array $options = array() ) {

		if ( isset( $options['exclude_relations'] ) && ! is_array( $options['exclude_relations'] ) ) {
			$options['exclude_relations'] = (array) $options['exclude_relations'];
		}

		$columns = static::table()->get_columns();

		$options = wp_parse_args( $options, array(
			'exclude_relations' => array_filter( $this->get_all_relations(), function ( $attribute ) use ( $columns ) {
				return array_key_exists( $attribute, $columns );
			} )
		) );

		$this->fire_model_event( 'saving' );

		$this->save_has_foreign_relations();

		if ( $this->exists() ) {
			$saved = $this->do_save_as_update();
		} else {
			$saved = $this->do_save_as_insert();
		}

		$this->save_loaded_relations( $options['exclude_relations'] );

		if ( $saved ) {
			$this->finish_save();
		}

		return $saved;
	}