Class ORM_Behavior_Guid


extends ORM_Behavior
extends Kohana_ORM_Behavior

Koseven Team
(c) 2016-2018 Koseven Team


protected Database_Query_Builder_Select $_config

Database query builder

Default value:

protected string $_guid_column

Table column for GUID value

Default value:
string(4) "guid"

protected boolean $_guid_only

Allow model creaton on guid key only

Default value:
bool TRUE


public on_construct(ORM $model , mixed $id ) (defined in ORM_Behavior_Guid)

Constructs a new model and loads a record if given


  • ORM $model required - The model
  • mixed $id required - Parameter for find or object to load

Source Code

public function on_construct($model, $id)
	if (($id !== NULL) AND ! is_array($id) AND ! ctype_digit($id))
     if (UUID::valid($id))
       $model->where($this->_guid_column, '=', $id)->find();
       // Prevent further record loading
       return FALSE;
   return TRUE;

public on_create(ORM $model ) (defined in ORM_Behavior_Guid)

A new model is created, add a guid value


  • ORM $model required - The model

Source Code

public function on_create($model)

public on_update(ORM $model ) (defined in ORM_Behavior_Guid)

The model is updated, add a guid value if empty


  • ORM $model required - The model

Source Code

public function on_update($model)

public static factory(string $behavior [, mixed $config = NULL ] ) (defined in Kohana_ORM_Behavior)

Creates and returns a new ORM behavior.


  • string $behavior required - $type Type name
  • mixed $config = NULL - $id Parameter for find()


  • Chainable -

Return Values

  • ORM

Source Code

public static function factory($behavior, $config = NULL)
	if ( ! is_string($behavior) AND is_array($config))
		if ( ! is_callable($config))
			throw new Kohana_Exception('Behavior cannot be created: function does not exists');

		// This is either a callback as an array or a lambda
		return new ORM_Behavior_LocalBehavior($config);

	// Set class name
	$behavior_name = 'ORM_Behavior_'.ucfirst($behavior);

	return new $behavior_name($config);

protected __construct(array $config ) (defined in ORM_Behavior_Guid)

Constructs a behavior object


  • array $config required - Configuration parameters

Source Code

protected function __construct($config)
  $this->_guid_column = Arr::get($config, 'column', $this->_guid_column);
  $this->_guid_only = Arr::get($config, 'guid_only', $this->_guid_only);

private create_guid() (defined in ORM_Behavior_Guid)

Source Code

private function create_guid($model)
  $current_guid = $model->get($this->_guid_column);

  // Try to create a new GUID
  $query = DB::select()->from($model->table_name())
    ->where($this->_guid_column, '=', ':guid')

  while (empty($current_guid))
    $current_guid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
      // 32 bits for "time_low"
      mt_rand(0, 0xffff), mt_rand(0, 0xffff),

      // 16 bits for "time_mid"
      mt_rand(0, 0xffff),

      // 16 bits for "time_hi_and_version",
      // four most significant bits holds version number 4
      mt_rand(0, 0x0fff) | 0x4000,

      // 16 bits, 8 bits for "clk_seq_hi_res",
      // 8 bits for "clk_seq_low",
      // two most significant bits holds zero and one for variant DCE1.1
      mt_rand(0, 0x3fff) | 0x8000,

      // 48 bits for "node"
      mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)

    $query->param(':guid', $current_guid);
    if ($query->execute()->get($model->primary_key(), FALSE) !== FALSE)
      Log::instance()->add(Log::NOTICE, 'Duplicate GUID created for '.$model->table_name());
      $current_guid = '';

  $model->set($this->_guid_column, $current_guid);

Do you want to contribute to Koseven?

We need YOUR help!

This project is open source. What does this mean? YOU can help:
  • Found a bug? Report it on Github
  • Need a feature? Add it Here
  • Want to help? Join the Forum
Go to Github