Объект класса Record
Запись из таблицы можно извлечь при помощи метода модели find($conditions), который возвращают объект класса Record. Объект данного класса предоставляет возможность доступа и изменения значений полей записи в таблице. Параметры выборки $conditions представляют собой ассоциированный массив, описанный в разделе Конструктор запросов.
Например возьмем модель, описывающую книги.
class Books extends Model
{
protected $name = 'Книги';
protected $model_elements = [
['Название', 'char', 'name', ['required' => true]],
['Автор', 'enum', 'author', ['foreign_key' => 'Authors']],
['Дата выхода', 'date', 'date'],
['Фотография обложки', 'image', 'photo'],
['Краткое описание', 'text', 'description']
];
}
Добавляем в модель метод для вывода списка книг.
<?
public function display()
{
//Все записи в алфавитном порядке
$rows = $this -> select(['order->desc' => 'name']);
$html = '';
//Создаем ссылку на каждую книгу
foreach($rows as $row)
$html .= '<li><a href="'.$this -> root_path.'books/'.$row['id'].'">'.$row['name'].'</a></li>';
return $html;
}
После вызова метода display() мы увидим список ссылок на странице с книгами. Создадим файл шаблона view-book.php для отображения информации о книге.
//Файл config/routes.php
'/books' => 'view-books-all.php',
'/book/*' => 'view-book.php',
Содержимое файла views/view-book.php
<?
//Берем вторую часть URL и сразу проверяем, чтобы она была числовой
$book_id = $mv -> checkUrlPart(1, 'numeric');
//Извлекаем запись по ее id
$book = $mv -> books -> find($book_id);
//Если запись не найдена показываем 404 ошибку
$mv -> display404($book);
<?
include $mv -> views_path.'main-header.php';
?>
<div class="content">
<h1><? echo $book -> name; ?></h1>
<h3>Автор:<? echo $book -> getEnumTitle('author'); ?></h3>
<div>Дата:<? echo I18n::formatDate($book -> date); ?></div>
<? echo $book -> resizeImage('photo', 200, 300); ?>
<h4>Краткое описание</h4>
<p><? echo nl2br($book -> description); ?></p>
</div>
<?
include $mv -> views_path.'main-footer.php';
?>
Аналогично можно взять самую новую книгу с списке или первую книгу конкретного автора.
$book = $mv -> books -> find(['order->desc' => 'date']);
$book = $mv -> books -> find(['order->asc' => 'date','author' => 42]);
Принципы работы объекта Record
Доступ к полям извлеченной записи осуществляется как доступ к свойствам объекта (если данное свойство у объекта присутствует, то его значение будет возвращено).
//Получение свойства
echo $book -> name;
echo I18n::formatDate($book -> date);
echo nl2br($book -> description);
//Установка значения свойства
$book -> name = 'Мастер и Маргарита';
$book -> description = 'Классика русской литературы.';
//Обновление записи
$book -> update();
//Все поля записи
Debug::pre($book -> all());
//Id записи 'Булгаков М.' в таблице модели Authors
$book -> author = $mv -> authors -> find(['name' => 'Булгаков М.']) -> id;
//Извлечение названия (заголовка) поля типа 'enum'
echo $book -> getEnumTitle('author');
//Уменьшение и вывод изображения
echo $book -> resizeImage('photo', 200, 300);
echo $book -> cropImage('photo', 100, 100);
Прочие методы
- setValues($values) - передать массив значений полей в объект Record
- all() - извлечь значения всех полей в виде ассоциированного массива
- getEnumTitle($field) - получить название (не ключ) поля типа enum
У объекта класса Record присутствуют методы для работы с файлами и изображениями, описанные в разделе Файлы и изображения:
- resizeImage($field, $width, $height) - сжатие изображения с сохранением пропорций
- cropImage($field, $width, $height) - сжатие и обрезка изображения
- displayImage($field) - вывод html тэга img для поля типа image с исходными размерами
- displayFileLink($field) - вывод ссылки на файл для скачивания
- asArrays($field) - извлечение изображений типа multi_images
- getFirstImage($field) - извлечение первого изображения из поля типа multi_images
Предположим в модели есть поле типа multi_images с названием 'pictures', а $product - экземпляр класса Record.
//Массив с путями к изображениям и комментариями
$images = $product -> extractImages('pictures');
$images = $product -> asArrays('pictures');
//Первое изображение в массиве
$image = $product -> getFirstImge('pictures');
Также в классе Record присутствуют методы CRUD описанные в разделе Управление записями.
Предыдущий раздел
Вывод данных в шаблоне