}
/**
- * Get a multi-instance object in an array
+ * Get a multi-instance object separated into an array
*
* This is a utility method to get multiple instances with a given set of
* values for a specific key column. Usually used for the primary key when
* @access public
* @return array (associative)
*/
- function table()
+ public function table()
{
$table = static::schemaDef();
return array_map(array($this, 'columnBitmap'), $table['fields']);
function sequenceKey()
{
- $table = call_user_func(array(get_class($this), 'schemaDef'));
+ $table = static::schemaDef();
foreach ($table['fields'] as $name => $column) {
if ($column['type'] == 'serial') {
// We have a serial/autoincrement column.
function keyTypes()
{
- $table = call_user_func(array(get_class($this), 'schemaDef'));
+ $table = static::schemaDef();
$keys = array();
if (!empty($table['unique keys'])) {
{
$links = array();
- $table = call_user_func(array(get_class($this), 'schemaDef'));
+ $table = static::schemaDef();
foreach ($table['foreign keys'] as $keyname => $keydef) {
if (count($keydef) == 2 && is_string($keydef[0]) && is_array($keydef[1]) && count($keydef[1]) == 1) {
*/
function _allCacheKeys()
{
- $table = call_user_func(array(get_class($this), 'schemaDef'));
+ $table = static::schemaDef();
$ckeys = array();
if (!empty($table['unique keys'])) {
}
return $ckeys;
}
+
+ /**
+ * Returns an ID, checked that it is set and reasonably valid
+ *
+ * If this dataobject uses a special id field (not 'id'), just
+ * implement your ID getting method in the child class.
+ *
+ * @return int ID of dataobject
+ * @throws Exception (when ID is not available or not set yet)
+ */
+ public function getID()
+ {
+ // FIXME: Make these exceptions more specific (their own classes)
+ if (!isset($this->id)) {
+ throw new Exception('No ID set.');
+ } elseif (empty($this->id)) {
+ throw new Exception('Empty ID for object! (not inserted yet?).');
+ }
+
+ // FIXME: How about forcing to return an int? Or will that overflow eventually?
+ return $this->id;
+ }
}