Skip to content

Latest commit

 

History

History

ru

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Yii2 mappable ActiveRecord

Это расширение для Yii framework 2 которое дает возможность использовать паттерн IdentityMap для любой модели ActiveRecord.

Как это работает

ActiveRecordTrait переопределяет метод find модели. Этот метод создает свой собственный ActiveQuery. В последствии при вызове метода one (all) полученная модель (модели) сохраняются в identityMap в виде массива атрибутов (это экономит память). При последующих запросах, данные возвращаются без обращения к базе данных.

Кроме этого, доступны следующие методы:

  • getById(integer $id, boolean $asArray = false) - получить модель или массив атрибутов (зависит от значения второго параметра) по первичному ключу;
  • getByAttribute(string $attribute, string $value, boolean $asArray = false) - получить модель или массив атрибутов (зависит от значения второго параметра) по значению уникального атрибута;
  • getMap() - получить все полученные модели из identityMap в виде массива атрибутов;
  • clearMap() - очистить identityMap.

Установка

Предпочтительным вариантом установки является composer.

Просто выполните команду

composer require --prefer-dist yiister/yii2-mappable-ar

или добавьте

"yiister/yii2-mappable-ar": "~1.0.0"

в секцию require вашего файла composer.json.

Настройка

Расщирение поддерживает следующие настройки:

  • idAttribute - атрибут первичного ключа (по умолчанию id);
  • identityMapMaxSize - максимальное количество элементов в identityMap (по умолчанию -1 = без ограничений);
  • uniqueAttributes - массив названии аттирутов, которые содержат уникальные значения. Используется в методе getByAttribute.

Например, для изменения поля первичного ключа на key достаточно указать в вашей модели public static $idAttribute = 'key';.

Использование

Для использования расширения достаточно указать для модели use yiister\mappable\ActiveRecordTrait;. После этого вам станут доступны все описанные возможности.

Важно! Если у вас переопределен метод find, то необходимо вызвать метод activeRecordTraitFind() и работать с его результатом.

Пример:

public static function find()
{
    $query = static::activeRecordTraitFind();
    // манипуляции с query
    return $query;
}