pnp4nagios/lib/kohana/system/libraries/ORM_Iterator.php
2025-08-06 18:11:51 +02:00

226 lines
4.8 KiB
PHP

<?php
// phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
// phpcs:disable PSR1.Files.SideEffects
defined('SYSPATH') or die('No direct access allowed.');
// phpcs:enable PSR1.Files.SideEffects
// phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
/**
* Object Relational Mapping (ORM) result iterator.
*
* $Id: ORM_Iterator.php 3769 2008-12-15 00:48:56Z zombor $
*
* @package ORM
* @author Kohana Team
* @copyright (c) 2007-2008 Kohana Team
* @license http://kohanaphp.com/license.html
*/
class ORM_Iterator_Core implements Iterator, ArrayAccess, Countable
{
// Class attributes
protected $class_name;
protected $primary_key;
protected $primary_val;
// Database result object
protected $result;
public function __construct(ORM $model, Database_Result $result)
{
// Class attributes
$this->class_name = get_class($model);
$this->primary_key = $model->primary_key;
$this->primary_val = $model->primary_val;
// Database result
$this->result = $result->result(true);
}
/**
* Returns an array of the results as ORM objects.
*
* @return array
*/
public function as_array()
{
$array = array();
if ($results = $this->result->result_array()) {
// Import class name
$class = $this->class_name;
foreach ($results as $obj) {
$array[] = new $class($obj);
}
}
return $array;
}
/**
* Return an array of all of the primary keys for this object.
*
* @return array
*/
public function primary_key_array()
{
$ids = array();
foreach ($this->result as $row) {
$ids[] = $row->{$this->primary_key};
}
return $ids;
}
/**
* Create a key/value array from the results.
*
* @param string key column
* @param string value column
* @return array
*/
public function select_list($key = null, $val = null)
{
if ($key === null) {
// Use the default key
$key = $this->primary_key;
}
if ($val === null) {
// Use the default value
$val = $this->primary_val;
}
$array = array();
foreach ($this->result->result_array() as $row) {
$array[$row->$key] = $row->$val;
}
return $array;
}
/**
* Return a range of offsets.
*
* @param integer start
* @param integer end
* @return array
*/
public function range($start, $end)
{
// Array of objects
$array = array();
if ($this->result->offsetExists($start)) {
// Import the class name
$class = $this->class_name;
// Set the end offset
$end = $this->result->offsetExists($end) ? $end : $this->count();
for ($i = $start; $i < $end; $i++) {
// Insert each object in the range
$array[] = new $class($this->result->offsetGet($i));
}
}
return $array;
}
/**
* Countable: count
*/
public function count()
{
return $this->result->count();
}
/**
* Iterator: current
*/
public function current()
{
if ($row = $this->result->current()) {
// Import class name
$class = $this->class_name;
$row = new $class($row);
}
return $row;
}
/**
* Iterator: key
*/
public function key()
{
return $this->result->key();
}
/**
* Iterator: next
*/
public function next()
{
return $this->result->next();
}
/**
* Iterator: rewind
*/
public function rewind()
{
$this->result->rewind();
}
/**
* Iterator: valid
*/
public function valid()
{
return $this->result->valid();
}
/**
* ArrayAccess: offsetExists
*/
public function offsetExists($offset)
{
return $this->result->offsetExists($offset);
}
/**
* ArrayAccess: offsetGet
*/
public function offsetGet($offset)
{
if ($this->result->offsetExists($offset)) {
// Import class name
$class = $this->class_name;
return new $class($this->result->offsetGet($offset));
}
}
/**
* ArrayAccess: offsetSet
*
* @throws Kohana_Database_Exception
*/
public function offsetSet($offset, $value)
{
throw new Kohana_Database_Exception('database.result_read_only');
}
/**
* ArrayAccess: offsetUnset
*
* @throws Kohana_Database_Exception
*/
public function offsetUnset($offset)
{
throw new Kohana_Database_Exception('database.result_read_only');
}
}
// End ORM Iterator