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