Spec-Zone.ru › CodeIgniter 4

Генерация результатов запроса

Существует несколько способов генерации результатов запроса:

  • Массивы результатов
  • Строки результатов
  • Пользовательские объекты результатов
  • Вспомогательные методы результатов
  • Справочник по классам

Массивы результатов

getResult()

Этот метод возвращает результат запроса в виде массива объектов или пустой массив при ошибке. Обычно используется в цикле foreach, например:

$query = $db->query("YOUR QUERY");

foreach ($query->getResult() as $row) {
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

Вышеуказанный метод является алиасом getResultObject().

Вы можете передать строку ‘array’, если хотите получить результаты в виде массива массивов:

$query = $db->query("YOUR QUERY");

foreach ($query->getResult('array') as $row) {
    echo $row['title'];
    echo $row['name'];
    echo $row['body'];
}

Вышеупомянутое использование является алиасом getResultArray().

Вы также можете передать строку в getResult(), которая представляет класс для создания экземпляра для каждого объекта результата

$query = $db->query("SELECT * FROM users;");

foreach ($query->getResult('User') as $user) {
    echo $user->name; // access attributes
    echo $user->reverseName(); // or methods defined on the 'User' class
}

Вышеуказанный метод является алиасом getCustomResultObject().

getResultArray()

Этот метод возвращает результат запроса как чистый массив или пустой массив, если результат отсутствует. Обычно используется в цикле foreach, например:

$query = $db->query("YOUR QUERY");

foreach ($query->getResultArray() as $row) {
    echo $row['title'];
    echo $row['name'];
    echo $row['body'];
}

Строки результатов

getRow()

Этот метод возвращает одну строку результата. Если ваш запрос возвращает более одной строки, он возвращает только первую строку. Результат возвращается как объект. Вот пример использования:

$query = $db->query("YOUR QUERY");

$row = $query->getRow();

if (isset($row)) {
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

Если вы хотите получить конкретную строку, вы можете передать номер строки как цифру в первом параметре:

$row = $query->getRow(5);

Вы также можете добавить второй строковый параметр, который является именем класса для создания экземпляра строки с:

$query = $db->query("SELECT * FROM users LIMIT 1;");
$row = $query->getRow(0, 'User');

echo $row->name; // access attributes
echo $row->reverse_name(); // or methods defined on the 'User' class

getRowArray()

Идентично вышеупомянутому row() методу, за исключением того, что он возвращает массив. Пример:

$query = $db->query("YOUR QUERY");

$row = $query->getRowArray();

if (isset($row)) {
    echo $row['title'];
    echo $row['name'];
    echo $row['body'];
}

Если вы хотите получить конкретную строку, вы можете передать номер строки как цифру в первом параметре:

$row = $query->getRowArray(5);

Кроме того, вы можете перемещаться вперед/назад/к первой/последней строке результатов, используя эти варианты:

По умолчанию они возвращают объект, если вы не укажете слово «array» в параметре:

Примечание

Все вышеперечисленные методы загружают весь результат в память (предварительная загрузка). Используйте getUnbufferedRow() для обработки больших наборов результатов.

getUnbufferedRow()

Этот метод возвращает одну строку результата без предварительной загрузки всего результата в память, как это делает row(). Если ваш запрос возвращает более одной строки, он возвращает текущую строку и перемещает внутренний указатель данных вперед.

$query = $db->query("YOUR QUERY");

while ($row = $query->getUnbufferedRow()) {
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

Для использования с MySQLi вы можете установить режим результата MySQLi в MYSQLI_USE_RESULT для максимальной экономии памяти. Использование этого режима не рекомендуется в общем случае, но может быть полезно в некоторых ситуациях, например, при записи больших запросов в csv. Если вы изменяете режим результата, знайте о компромиссах, связанных с этим.

$db->resultMode = MYSQLI_USE_RESULT; // for unbuffered results

$query = $db->query("YOUR QUERY");

$file = new \CodeIgniter\Files\File(WRITEPATH.'data.csv');

$csv = $file->openFile('w');

while ($row = $query->getUnbufferedRow('array'))
{
    $csv->fputcsv($row);
}

$db->resultMode = MYSQLI_STORE_RESULT; // return to default mode

Примечание

При использовании MYSQLI_USE_RESULT все последующие вызовы для того же соединения приведут к ошибке, пока все записи не будут извлечены или не будет сделан вызов freeResult(). Метод getNumRows() вернет только количество строк, основываясь на текущем положении указателя данных. Таблицы MyISAM будут оставаться заблокированными до тех пор, пока все записи не будут извлечены или не будет сделан вызов freeResult().

Вы можете дополнительно передать «object» (по умолчанию) или «array», чтобы указать тип возвращаемого значения:

$query->getUnbufferedRow();         // object
$query->getUnbufferedRow('object'); // object
$query->getUnbufferedRow('array');  // associative array

Пользовательские объекты результатов

Вы можете получить результаты в виде экземпляра пользовательского класса вместо stdClass или массива, как позволяют методы getResult() и getResultArray(). Если класс еще не загружен в память, автозагрузчик попытается его загрузить. Объект будет иметь все значения, возвращенные из базы данных, установленные как свойства. Если эти значения были объявлены и являются непубличными, вы должны предоставить метод __set() для возможности их установки.

Пример:

class User
{
    public $id;
    public $email;
    public $username;

    protected $last_login;

    public function lastLogin($format)
    {
        return $this->lastLogin->format($format);
    }

    public function __set($name, $value)
    {
        if ($name === 'lastLogin') {
            $this->lastLogin = DateTime::createFromFormat('U', $value);
        }
    }

    public function __get($name)
    {
        if (isset($this->$name)) {
            return $this->$name;
        }
    }
}

В дополнение к двум перечисленным методам, следующие методы также могут принимать имя класса для возвращения результатов в виде: getFirstRow(), getLastRow(), getNextRow(), и getPreviousRow().

getCustomResultObject()

Возвращает весь набор результатов в виде массива экземпляров запрошенного класса. Единственный параметр — имя класса для создания экземпляра.

Пример:

$query = $db->query("YOUR QUERY");

$rows = $query->getCustomResultObject('User');

foreach ($rows as $row) {
    echo $row->id;
    echo $row->email;
    echo $row->last_login('Y-m-d');
}

getCustomRowObject()

Возвращает одну строку из результатов запроса. Первый параметр — номер строки в результатах. Второй параметр — имя класса для создания экземпляра.

Пример:

$query = $db->query("YOUR QUERY");

$row = $query->getCustomRowObject(0, 'User');

if (isset($row)) {
    echo $row->email;               // access attributes
    echo $row->last_login('Y-m-d'); // access class methods
}

Вы также можете использовать метод getRow() точно таким же образом.

Пример:

$row = $query->getCustomRowObject(0, 'User');

Вспомогательные методы результатов

getFieldCount()

Количество ПОЛЕЙ (столбцов), возвращаемых запросом. Убедитесь, что вызываете метод, используя объект результата вашего запроса:

$query = $db->query('SELECT * FROM my_table');

echo $query->getFieldCount();

getFieldNames()

Возвращает массив с именами ПОЛЕЙ (столбцов), возвращаемых запросом. Убедитесь, что вызываете метод, используя объект результата вашего запроса:

$query = $db->query('SELECT * FROM my_table');

echo $query->getFieldNames();

getNumRows()

Количество записей, возвращаемых запросом. Убедитесь, что вызываете метод, используя объект результата вашего запроса:

$query = $db->query('SELECT * FROM my_table');

echo $query->getNumRows();

Примечание

Поскольку SQLite3 не имеет эффективного метода, возвращающего количество записей, CodeIgniter извлечет и буферизует записи результата запроса в памяти и вернет количество записей в массиве результата, что может быть неэффективно.

freeResult()

Освобождает память, связанную с результатом, и удаляет идентификатор ресурса результата. Обычно PHP автоматически освобождает память в конце выполнения скрипта. Однако, если вы выполняете много запросов в конкретном скрипте, вы можете освободить результат после каждого сгенерированного результата запроса, чтобы сократить потребление памяти.

Пример:

$query = $thisdb->query('SELECT title FROM my_table');

foreach ($query->getResult() as $row) {
    echo $row->title;
}

$query->freeResult(); // The $query result object will no longer be available

$query2 = $db->query('SELECT name FROM some_table');

$row = $query2->getRow();
echo $row->name;
$query2->freeResult(); // The $query2 result object will no longer be available

dataSeek()

Этот метод устанавливает внутренний указатель для следующей строки результата, которая будет извлечена. Он полезен только в сочетании с getUnbufferedRow().

Он принимает положительное целое значение, по умолчанию равное 0, и возвращает true при успехе или false при ошибке.

$query = $db->query('SELECT `field_name` FROM `table_name`');
$query->dataSeek(5); // Skip the first 5 rows
$row = $query->getUnbufferedRow();

Примечание

Не все драйверы баз данных поддерживают эту функцию и вернут false. В частности, вы не сможете использовать ее с PDO.

Справочник по классам

CodeIgniter\Database\BaseResult
getResult([$type = 'object'])
Параметры:
  • $type (string) – Тип запрошенных результатов - массив, объект или имя класса
Возвращает:

Массив, содержащий извлечённые строки

Тип возвращаемого значения:

массив

Оборачивающий метод для методов getResultArray(), getResultObject() и getCustomResultObject().

Использование: см. Массивы результатов.

getResultArray()
Возвращает: Массив, содержащий извлечённые строки
Тип возвращаемого значения: массив

Возвращает результаты запроса в виде массива строк, где каждая строка сама по себе является ассоциативным массивом.

Использование: см. Массивы результатов.

getResultObject()
Возвращает: Массив, содержащий извлечённые строки
Тип возвращаемого значения: массив

Возвращает результаты запроса в виде массива строк, где каждая строка является объектом типа stdClass.

Использование: см. Массивы результатов.

getCustomResultObject($class_name)
Параметры:
  • $class_name (string) – Имя класса для результирующих строк
Возвращает:

Массив, содержащий извлечённые строки

Тип возвращаемого значения:

массив

Возвращает результаты запроса в виде массива строк, где каждая строка — экземпляр указанного класса.

getRow([$n = 0[, $type = 'object']])
Параметры:
  • $n (int) – Индекс строки результатов запроса, которая должна быть возвращена
  • $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает:

Запрошенная строка или null, если она не существует

Тип возвращаемого значения:

смешанный тип

Оборачивающий метод для методов getRowArray(), getRowObject() и getCustomRowObject().

Использование: см. Строки результатов.

getUnbufferedRow([$type = 'object'])
Параметры:
  • $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает:

Следующая строка из набора результатов или null, если она не существует

Тип возвращаемого значения:

смешанный тип

Извлекает следующую строку результатов и возвращает её в запрошенном формате.

Использование: см. Строки результатов.

getRowArray([$n = 0])
Параметры:
  • $n (int) – Индекс строки результатов запроса, которая должна быть возвращена
Возвращает:

Запрошенная строка или null, если она не существует

Тип возвращаемого значения:

массив

Возвращает запрошенную строку результатов в виде ассоциативного массива.

Использование: см. Строки результатов.

getRowObject([$n = 0])
Параметры:
  • $n (int) – Индекс строки результатов запроса, которая должна быть возвращена :возвращает: Запрошенная строка или null, если она не существует
Тип возвращаемого значения:

stdClass

Возвращает запрошенную строку результатов в виде объекта типа stdClass.

Использование: см. Строки результатов.

getCustomRowObject($n, $type)
Параметры:
  • $n (int) – Индекс строки результатов, которая должна быть возвращена
  • $class_name (string) – Имя класса для результирующей строки
Возвращает:

Запрошенная строка или null, если она не существует

Тип возвращаемого значения:

$type

Возвращает запрошенную строку результатов как экземпляр запрошенного класса.

dataSeek([$n = 0])
Параметры:
  • $n (int) – Индекс строки результатов, которая должна быть возвращена следующей
Возвращает:

true при успехе, false при ошибке

Тип возвращаемого значения:

bool

Перемещает внутренний указатель на строку результатов на желаемый смещение.

Использование: см. Методы обработки результатов.

setRow($key[, $value = null])
Параметры:
  • $key (mixed) – Имя столбца или массив пар ключ/значение
  • $value (mixed) – Значение, которое нужно назначить столбцу, $key — это имя одного поля
Тип возвращаемого значения:

void

Назначает значение определённому столбцу.

getNextRow([$type = 'object'])
Параметры:
  • $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает:

Следующая строка набора результатов или null, если её нет

Тип возвращаемого значения:

смешанный тип

Возвращает следующую строку из набора результатов.

getPreviousRow([$type = 'object'])
Параметры:
  • $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает:

Предыдущая строка набора результатов или null, если её нет

Тип возвращаемого значения:

смешанный тип

Возвращает предыдущую строку из набора результатов.

getFirstRow([$type = 'object'])
Параметры:
  • $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает:

Первая строка набора результатов или null, если её нет

Тип возвращаемого значения:

смешанный тип

Возвращает первую строку набора результатов.

getLastRow([$type = 'object'])
Параметры:
  • $type (string) – Тип запрошенного результата - массив, объект или имя класса
Возвращает:

Последняя строка набора результатов или null, если её нет

Тип возвращаемого значения:

смешанный тип

Возвращает последнюю строку из набора результатов.

getFieldCount()
Возвращает: Количество полей в наборе результатов
Тип возвращаемого значения: int

Возвращает количество полей в наборе результатов.

Использование: см. Методы обработки результатов.

getFieldNames()
Возвращает: Массив имён столбцов
Тип возвращаемого значения: array

Возвращает массив, содержащий имена полей в наборе результатов.

getFieldData()
Возвращает: Массив, содержащий метаданные поля
Тип возвращаемого значения: array

Генерирует массив объектов stdClass, содержащих метаданные поля.

getNumRows()
Возвращает: Количество строк в наборе результатов
Тип возвращаемого значения: int

Возвращает количество строк, возвращенных запросом.

freeResult()
Тип возвращаемого значения: void

Освобождает набор результатов.

Использование: см. Методы обработки результатов.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/database/results.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API