It is an extension for Yii framework 2 that gives an ability to use identity map for any ActiveRecord model.
ActiveRecordTrait
overrides a find
method of model. This method creates a custom ActiveQuery
. When one
(all
) method is called, a got model (models) save to identityMap
as array of attributes (It saves a memory). The next requests return data without queries to data base.
By the way the next methods are allowed:
getById(integer $id, boolean $asArray = false)
- get a model or an array of attributes (It depends on second param value) by primary key;getByAttribute(string $attribute, string $value, boolean $asArray = false)
- get a model or an array of attributes (It depends on second param value) by unique attribute value;getMap()
- get all models fromidentityMap
as array of attributes;clearMap()
- clear anidentityMap
.
The preferred way to install this extension is through composer.
Either run
composer require --prefer-dist yiister/yii2-mappable-ar
or add
"yiister/yii2-mappable-ar": "~1.0.0"
to the require
section of your composer.json.
The extension supports the next settings:
idAttribute
- the primary key attribute (by defaultid
);identityMapMaxSize
- the maximum elements count in identityMap (by default-1
= no limit);uniqueAttributes
- array of attribute names that contains unique values. It is used at thegetByAttribute
method.
For example, for change a primary key attribute to key
add to your model public static $idAttribute = 'key';
.
Just add use yiister\mappable\ActiveRecordTrait;
to your model for using an identityMap. You got all features after it.
Warn! If you have overridden find
method in your model you have to call activeRecordTraitFind()
method and work with its result.
Example:
public static function find()
{
$query = static::activeRecordTraitFind();
// another work with $query
return $query;
}