5.3 Схема объекта
Свойство маппера $map представляет собой набор правил наложения данных БД на объектную модель. Вот несколько упрощенный пример map:
protected $map = array( 'id' => array( 'accessor' => 'getId', 'mutator' => 'setId', 'options' => array( 'pk', 'once', ) ), 'title' => array( 'accessor' => 'getTitle', 'mutator' => 'setTitle' ) )
Ключами массива $map являются имена полей таблицы БД (которая задается в параметре $table маппера, ссылка). В общем случае у каждого поля должно быть описано имена двух методов — accessor и mutator.
Имя accessor'а имеет префикс "get" и используется для получения данных, которые хранятся в данном поле.
Mutator, соответственно, имеет префикс "set" и используется для сохранения данных в DO.
У каждого поля может содержаться любое количество дополнительных параметров в ключе 'options'. Приведем примеры нескольких опций:
- pk — присутствие такой опции будет говорить о том, что данное поле является Первичным Ключом (Primary Key) для таблицы.
- once — поля с этой опцией будут доступны для сохранения только один раз при создании объекта. При попытке задать такое поле вторично, будет сгенерировано исключение
- ro — поле доступно только для чтения. При попытке задать значения через соответствующий мутатор, будет сгенерировано исключение.
Основные методы для работы с мапперами:
- create() - создание объекта.
- save($object) - сохранение объекта $object.
- delete($id) - удаление объекта, в качестве идентификатора используется первичный ключ $id или сам объект.
Также для удобства имеется ряд методов для получения записей:
- searchByKeys($id) - поиск объектов по первичным ключам. В качестве аргумента передаётся массив.
- searchOneByField($field, $value) - поиск объекта по полю $field со значением $value.
- searchAllByField($field, $value) - поиск объектов по полю $field со значение $value.
- searchOneByCriteria(criteria $criteria) - поиск объекта по критерию.
- searchAllByCriteria(criteria $criteria) - поиск объектов по критерию.
- searchAll($orderCriteria = null) - выборка всех объектов. В качестве аргумента может быть передан критерий для сортировки.
Естественно, что в ваших мапперах вы можете расширить данный список методов для поиска. Так например метод searchByLogin (метод для поиска пользователя по его логину) будет выглядеть следующим образом:
class userMapper extends simpleMapper { [...] /** * Выполняет поиск объекта по логину * * @param string $login логин * @return object */ public function searchByLogin($login) { return $this->searchOneByField('login', $login); } }
Экранировать значения, передаваемые в аргументах, не нужно. За вас это сделает генератор запросов.
О работе с критериями можно узнать в соответствующем разделе.