<?php

namespace SilverStripe\Model;

use DBField;
use SS_Filterable;
use SS_Limitable;
use SS_List;
use SS_Sortable;

/**
 * Abstract representation of a DB relation field, either saved or in memory
 *
 * @package framework
 * @subpackage model
 */
interface Relation extends SS_List, SS_Filterable, SS_Sortable, SS_Limitable {

	/**
	 * Sets the ComponentSet to be the given ID list.
	 * Records will be added and deleted as appropriate.
	 *
	 * @param array $idList List of IDs.
	 */
	public function setByIDList($idList);

	/**
	 * Returns an array with both the keys and values set to the IDs of the records in this list.
	 *
	 * Does not return the IDs for unsaved DataObjects
	 *
	 * @return array
	 */
	public function getIDList();

	/**
	 * Return the DBField object that represents the given field on the related class.
	 *
	 * @param string $fieldName Name of the field
	 * @return DBField The field as a DBField object
	 */
	public function dbObject($fieldName);
}