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'
    )

Вы можете использовать все распространенные операторы сравнения в своем выражении, одиночное работает =.

Лучший способ поиска в 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.

Печать/экспорт