Содержание
Jig Mapper
Jig Object-Document-Mapper - это реализация абстрактного класса Cursor. В этой статье описаны унаследованные методы.
Пространство имен: \DB\Jig
Расположение файла:lib/db/jig/mapper.php
Инициализация
Чтобы использовать Jig ODM, создайте соединение Jig DB. Например:
$mapper = new \DB\Jig\Mapper(\DB\Jig $db, string $file);
Если вы хотите создать класс модели, то:
$f3->set('DB',new DB\Jig('data/')); class User extends \DB\Jig\Mapper { public function __construct() { parent::__construct( \Base::instance()->get('DB'), 'users.json' ); } } $user = new User(); $user->load(array('@_id = ?','515c570f28de6')); // etc.
Первичный ключ документов Jig назван _id.
Синтаксис
$ filter
$filter в Jig имеет следующую структуру:
// array value for parameterized queries array( string $expr [, string $bindValue1 [, string $bindValue2 [, ...]]] )
Часть $expr должна содержать допустимый кода, где все поля mapper'а начинается с символа @. Вы можете привязать к ним значения с помощью позиционных или именованных токенов. Вот пример:
// positional tokens array('@username = ? and @password = ?','John','acbd18db4cc2f85cedef654fccc4a4d8') // named tokens array('@username = :user and @password = :pw',':user'=>'John',':pw'=>'acbd18db4cc2f85cedef654fccc4a4d8')
Важно: Jig - это средство сопоставления документов без схемы, поэтому поля документа могут отличаться от одной записи к другой. Чтобы создать допустимую строку $expr, не забудьте добавить дополнительные проверки существования полей, чтобы предотвратить появление странных ошибок неопределенных переменных. Для этого используется isset:
array( '(isset(@username) && @username == ?) && (isset(@password) && @password = ?)', 'John','acbd18db4cc2f85cedef654fccc4a4d8' )
Вы можете использовать все распространенные операторы сравнения в своем выражении, одиночное работает =.
Search
Лучший способ поиска в Jig - использовать следующие условия preg_match:
$userList = $user->find(array('(isset(@email) && preg_match(?,@email))','/gmail/')); // returns all users with an email address that contains GMAIL // ends with gmail.com => /gmail\.com$/ // starts with john => /^john/
Эквивалент оператора IN в SQL выглядит так:
$user->find(array('in_array('_id',array(1,2,3))'));
Если в вашем документе используется поле массива, то есть теги, вы можете найти все сообщения по тегу, просто меняя параметры in_array:
$post->find(array('isset(@tags) && in_array("fat-free",@tags)'));
$ option
Аргумент Jig $option принимает имеет структуру:
array( 'order' => string $orderClause, 'limit' => integer $limit, 'offset' => integer $offset )
то есть:
array( 'order' => 'score SORT_DESC, team_name SORT_ASC', 'limit' => 20, 'offset' => 0 )
Методы
exists
Вернет TRUE, если данное поле определено
bool exists( string $key )
set
Присвойте значение полю
scalar|FALSE set( string $key, scalar $val )
Этот класс использует преимущества класса Magic и интерфейса ArrayAccess. Это означает, что вы можете устанавливать и получать переменные с прямым доступом следующим образом:
$mapper->foo = 'bar'; $mapper['foo'] = 'bar';
get
Получить значение поля
scalar|FALSE get( string $key )
clear
Очистить значение поля
NULL clear( string $key )
fields
Возвращает имена полей объекта mapper'а
array fields( )
cast
Возвращает поля объектов mapper'а в виде ассоциативного массива
array cast( [ object $obj = NULL ] )
token
Преобразование токенов в строковом выражении в имена переменных
string token( string $str )
find
Возвращает записи, соответствующих заданному критерию
array|FALSE find( [ array $filter = NULL [, array $options = NULL [, int $ttl = 0 [, bool $log = TRUE ]]]] )
coutn
Подсчет записей, соответствующих заданному критерию
int count( [ array $filter = NULL [, $ttl = 0 ]] )
insert
Вставить новую запись
array insert( )
update
Обновить текущую запись
array update( )
erase
Удалить текущую запись
bool erase( [ array $filter = NULL ] )
copyfrom
Сопоставить объект mapper'а с помощью массива
NULL copyfrom( array | string $var [, callback $func = NULL ] )
Этот метод позволяет сопоставить элементы массива из hive с БД в таблице которой имена полей соответсвуют именам ключей этого массива.
$func - это функция обратного вызова, применяемая к переменной массива hive:
if ($func) $var = $func($var);
copyto
Заполните переменную массива hive полями mapper'а
NULL copyto( string $key )
factory
Преобразование массива в объект mapper'а
protected object factory( string $id, array $row )
Этот метод, с областью видимости protected, используется внутри метода select.