Это расширение для 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;
}