# Abstract Class yii\mongodb\ActiveRecord

Inheritance | yii\mongodb\ActiveRecord » yii\db\BaseActiveRecord » yii\base\Model » yii\base\Component » yii\base\BaseObject
Implements | ArrayAccess, IteratorAggregate, yii\base\Arrayable, yii\base\Configurable, yii\base\StaticInstanceInterface, yii\db\ActiveRecordInterface
Uses Traits | yii\base\ArrayableTrait, yii\base\StaticInstanceTrait
Subclasses | yii\mongodb\file\ActiveRecord
Available since version | 2.0
Source Code | https://github.com/yiisoft/yii2-mongodb/blob/master/ActiveRecord.php

ActiveRecord is the base class for classes representing Mongo documents in terms of objects.

## Public Properties

Hide inherited properties

Property | Type | Description | Defined By
--- | --- | --- | ---
$activeValidators | yii\validators\Validator[] | The validators applicable to the current $scenario. | yii\base\Model
$attributes | array | Attribute values (name => value). | yii\base\Model
$behaviors | yii\base\Behavior[] | List of behaviors attached to this component. | yii\base\Component
$dirtyAttributes | array | The changed attribute values (name-value pairs). | yii\db\BaseActiveRecord
$errors | array | Errors for all attributes or the specified attribute. | yii\base\Model
$firstErrors | array | The first errors. | yii\base\Model
$isNewRecord | boolean | Whether the record is new and should be inserted when calling save(). | yii\db\BaseActiveRecord
$iterator | ArrayIterator | An iterator for traversing the items in the list. | yii\base\Model
$oldAttributes | array | The old attribute values (name-value pairs). | yii\db\BaseActiveRecord
$oldPrimaryKey | mixed | The old primary key value. | yii\db\BaseActiveRecord
$primaryKey | mixed | The primary key value. | yii\db\BaseActiveRecord
$relatedRecords | array | An array of related records indexed by relation names. | yii\db\BaseActiveRecord
$scenario | string | The scenario that this model is in. | yii\base\Model
$validators | ArrayObject|yii\validators\Validator[] | All the validators declared in the model. | yii\base\Model

## Public Methods

Hide inherited methods

Method | Description | Defined By
--- | --- | ---
LockDocument() | Locks a document of the collection in a transaction (like `select for update` feature in MySQL) | yii\mongodb\ActiveRecord
LockDocumentStubbornly() | Locking a document in stubborn mode on a transaction (like `select for update` feature in MySQL) | yii\mongodb\ActiveRecord
__call() | Calls the named method which is not a class method. | yii\base\Component
__clone() | This method is called after the object is created by cloning an existing one. | yii\base\Model
__construct() | Constructor. | yii\base\BaseObject
__get() | PHP getter magic method. | yii\db\BaseActiveRecord
__isset() | Checks if a property value is null. | yii\db\BaseActiveRecord
__set() | PHP setter magic method. | yii\db\BaseActiveRecord
__unset() | Sets a component property to be null. | yii\db\BaseActiveRecord
activeAttributes() | Returns the attribute names that are subject to validation in the current scenario. | yii\base\Model
addError() | Adds a new error to the specified attribute. | yii\base\Model
addErrors() | Adds a list of errors. | yii\base\Model
afterDelete() | This method is invoked after deleting a record. | yii\db\BaseActiveRecord
afterFind() | This method is called when the AR object is created and populated with the query result. | yii\db\BaseActiveRecord
afterRefresh() | This method is called when the AR object is refreshed. | yii\db\BaseActiveRecord
afterSave() | This method is called at the end of inserting or updating a record. | yii\db\BaseActiveRecord
afterValidate() | This method is invoked after validation ends. | yii\base\Model
attachBehavior() | Attaches a behavior to this component. | yii\base\Component
attachBehaviors() | Attaches a list of behaviors to the component. | yii\base\Component
attributeHints() | Returns the attribute hints. | yii\base\Model
attributeLabels() | Returns the attribute labels. | yii\base\Model
attributes() | Returns the list of all attribute names of the model. | yii\mongodb\ActiveRecord
beforeDelete() | This method is invoked before deleting a record. | yii\db\BaseActiveRecord
beforeSave() | This method is called at the beginning of inserting or updating a record. | yii\db\BaseActiveRecord
beforeValidate() | This method is invoked before validation starts. | yii\base\Model
behaviors() | Returns a list of behaviors that this component should behave as. | yii\base\Component
canGetProperty() | Returns a value indicating whether a property can be read. | yii\db\BaseActiveRecord
canSetOldAttribute() | Returns if the old named attribute can be set. | yii\db\BaseActiveRecord
canSetProperty() | Returns a value indicating whether a property can be set. | yii\db\BaseActiveRecord
className() | Returns the fully qualified name of this class. | yii\base\BaseObject
clearErrors() | Removes errors for all attributes or a single attribute. | yii\base\Model
collectionName() | Declares the name of the Mongo collection associated with this AR class. | yii\mongodb\ActiveRecord
createValidators() | Creates validator objects based on the validation rules specified in rules(). | yii\base\Model
delete() | Deletes the document corresponding to this active record from the collection. | yii\mongodb\ActiveRecord
deleteAll() | Deletes documents in the collection using the provided conditions. | yii\mongodb\ActiveRecord
detachBehavior() | Detaches a behavior from the component. | yii\base\Component
detachBehaviors() | Detaches all behaviors from the component. | yii\base\Component
ensureBehaviors() | Makes sure that the behaviors declared in behaviors() are attached to this component. | yii\base\Component
equals() | Returns a value indicating whether the given active record is the same as the current one. | yii\mongodb\ActiveRecord
extraFields() | Returns the list of fields that can be expanded further and returned by toArray(). | yii\base\ArrayableTrait
fields() | Returns the list of fields that should be returned by default by toArray() when no specific fields are specified. | yii\base\ArrayableTrait
find() | Creates an yii\db\ActiveQueryInterface instance for query purpose. | yii\mongodb\ActiveRecord
findAll() | Returns a list of active record models that match the specified primary key value(s) or a set of column values. | yii\db\BaseActiveRecord
findOne() | Returns a single active record model instance by a primary key or an array of column values. | yii\db\BaseActiveRecord
formName() | Returns the form name that this model class should use. | yii\base\Model
generateAttributeLabel() | Generates a user friendly attribute label based on the give attribute name. | yii\base\Model
getActiveValidators() | Returns the validators applicable to the current $scenario. | yii\base\Model
getAttribute() | Returns the named attribute value. | yii\db\BaseActiveRecord
getAttributeHint() | Returns the text hint for the specified attribute. | yii\db\BaseActiveRecord
getAttributeLabel() | Returns the text label for the specified attribute. | yii\db\BaseActiveRecord
getAttributes() | Returns attribute values. | yii\base\Model
getBehavior() | Returns the named behavior object. | yii\base\Component
getBehaviors() | Returns all behaviors attached to this component. | yii\base\Component
getCollection() | Return the Mongo collection instance for this AR class. | yii\mongodb\ActiveRecord
getDb() | Returns the Mongo connection used by this AR class. | yii\mongodb\ActiveRecord
getDirtyAttributes() | Returns the attribute values that have been modified since they are loaded or saved most recently. | yii\db\BaseActiveRecord
getErrorSummary() | Returns the errors for all attributes as a one-dimensional array. | yii\base\Model
getErrors() | Returns the errors for all attributes or a single attribute. | yii\base\Model
getFirstError() | Returns the first error of the specified attribute. | yii\base\Model
getFirstErrors() | Returns the first error of every attribute in the model. | yii\base\Model
getIsNewRecord() | Returns a value indicating whether the current record is new. | yii\db\BaseActiveRecord
getIterator() | Returns an iterator for traversing the attributes in the model. | yii\base\Model
getOldAttribute() | Returns the old value of the named attribute. | yii\db\BaseActiveRecord
getOldAttributes() | Returns the old attribute values. | yii\db\BaseActiveRecord
getOldPrimaryKey() | Returns the old primary key value(s). | yii\db\BaseActiveRecord
getPrimaryKey() | Returns the primary key value(s). | yii\db\BaseActiveRecord
getRelatedRecords() | Returns all populated related records. | yii\db\BaseActiveRecord
getRelation() | Returns the relation object with the specified name. | yii\db\BaseActiveRecord
getScenario() | Returns the scenario that this model is used in. | yii\base\Model
getValidators() | Returns all the validators declared in rules(). | yii\base\Model
hasAttribute() | Returns a value indicating whether the model has an attribute with the specified name. | yii\db\BaseActiveRecord
hasErrors() | Returns a value indicating whether there is any validation error. | yii\base\Model
hasEventHandlers() | Returns a value indicating whether there is any handler attached to the named event. | yii\base\Component
hasMany() | Declares a `has-many` relation. | yii\db\BaseActiveRecord
hasMethod() | Returns a value indicating whether a method is defined. | yii\base\Component
hasOne() | Declares a `has-one` relation. | yii\db\BaseActiveRecord
hasProperty() | Returns a value indicating whether a property is defined for this component. | yii\base\Component
init() | Initializes the object. | yii\db\BaseActiveRecord
insert() | Inserts a row into the associated Mongo collection using the attribute values of this record. | yii\mongodb\ActiveRecord
instance() | Returns static class instance, which can be used to obtain meta information. | yii\base\StaticInstanceTrait
instantiate() | Creates an active record instance. | yii\db\BaseActiveRecord
isAttributeActive() | Returns a value indicating whether the attribute is active in the current scenario. | yii\base\Model
isAttributeChanged() | Returns a value indicating whether the named attribute has been changed. | yii\db\BaseActiveRecord
isAttributeRequired() | Returns a value indicating whether the attribute is required. | yii\base\Model
isAttributeSafe() | Returns a value indicating whether the attribute is safe for massive assignments. | yii\base\Model
isPrimaryKey() | Returns a value indicating whether the given set of attributes represents the primary key for this model. | yii\db\BaseActiveRecord
isRelationPopulated() | Check whether the named relation has been populated with records. | yii\db\BaseActiveRecord
isTransactional() | Returns a value indicating whether the specified operation is transactional in the current $scenario. | yii\mongodb\ActiveRecord
link() | Establishes the relationship between two models. | yii\db\BaseActiveRecord
load() | Populates the model with input data. | yii\base\Model
loadMultiple() | Populates a set of models with the data from end user. | yii\base\Model
loadRelations() | Eager loads related models for the already loaded primary model. | yii\db\BaseActiveRecord
loadRelationsFor() | Eager loads related models for the already loaded primary models. | yii\db\BaseActiveRecord
markAttributeDirty() | Marks an attribute dirty. | yii\db\BaseActiveRecord
off() | Detaches an existing event handler from this component. | yii\base\Component
offsetExists() | Returns whether there is an element at the specified offset. | yii\db\BaseActiveRecord
offsetGet() | Returns the element at the specified offset. | yii\base\Model
offsetSet() | Sets the element at the specified offset. | yii\base\Model
offsetUnset() | Sets the element value at the specified offset to null. | yii\db\BaseActiveRecord
on() | Attaches an event handler to an event. | yii\base\Component
onUnsafeAttribute() | This method is invoked when an unsafe attribute is being massively assigned. | yii\base\Model
optimisticLock() | Returns the name of the column that stores the lock version for implementing optimistic locking. | yii\db\BaseActiveRecord
populateRecord() | Populates an active record object using a row of data from the database/storage. | yii\db\BaseActiveRecord
populateRelation() | Populates the named relation with the related records. | yii\db\BaseActiveRecord
primaryKey() | Returns the primary key name(s) for this AR class. | yii\mongodb\ActiveRecord
refresh() | Repopulates this active record with the latest data. | yii\db\BaseActiveRecord
rules() | Returns the validation rules for attributes. | yii\base\Model
safeAttributes() | Returns the attribute names that are safe to be massively assigned in the current scenario. | yii\base\Model
save() | Saves the current record. | yii\db\BaseActiveRecord
scenarios() | Returns a list of scenarios and the corresponding active attributes. | yii\base\Model
setAttribute() | Sets the named attribute value. | yii\db\BaseActiveRecord
setAttributes() | Sets the attribute values in a massive way. | yii\base\Model
setIsNewRecord() | Sets the value indicating whether the record is new. | yii\db\BaseActiveRecord
setOldAttribute() | Sets the old value of the named attribute. | yii\db\BaseActiveRecord
setOldAttributes() | Sets the old attribute values. | yii\db\BaseActiveRecord
setScenario() | Sets the scenario for the model. | yii\base\Model
toArray() | Converts the model into an array. | yii\mongodb\ActiveRecord
transactions() | Declares which DB operations should be performed within a transaction in different scenarios. | yii\mongodb\ActiveRecord
trigger() | Triggers an event. | yii\base\Component
unlink() | Destroys the relationship between two models. | yii\db\BaseActiveRecord
unlinkAll() | Destroys the relationship in current model. | yii\db\BaseActiveRecord
update() | Saves the changes to this active record into the associated database table. | yii\mongodb\ActiveRecord
updateAll() | Updates all documents in the collection using the provided attribute values and conditions. | yii\mongodb\ActiveRecord
updateAllCounters() | Updates all documents in the collection using the provided counter changes and conditions. | yii\mongodb\ActiveRecord
updateAttributes() | Updates the specified attributes. | yii\db\BaseActiveRecord
updateCounters() | Updates one or several counter columns for the current AR object. | yii\db\BaseActiveRecord
validate() | Performs the data validation. | yii\base\Model
validateMultiple() | Validates multiple models. | yii\base\Model

## Protected Methods

Hide inherited methods

Method | Description | Defined By
--- | --- | ---
createRelationQuery() | Creates a query instance for `has-one` or `has-many` relation. | yii\db\BaseActiveRecord
deleteInternal() |  | yii\mongodb\ActiveRecord
extractFieldsFor() | Extract nested fields from a fields collection for a given root field Nested fields are separated with dots (.). e.g: "item.id" The previous example would extract "id". | yii\base\ArrayableTrait
extractRootFields() | Extracts the root field names from nested fields. | yii\base\ArrayableTrait
insertInternal() |  | yii\mongodb\ActiveRecord
refreshInternal() | Repopulates this active record with the latest data from a newly fetched instance. | yii\db\BaseActiveRecord
resolveFields() | Determines which fields can be returned by toArray(). | yii\base\ArrayableTrait
updateInternal() |  | yii\mongodb\ActiveRecord

## Events

Hide inherited events

Event | Type | Description | Defined By
--- | --- | --- | ---
EVENT_AFTER_DELETE | yii\db\Event | An event that is triggered after a record is deleted. | yii\db\BaseActiveRecord
EVENT_AFTER_FIND | yii\db\Event | An event that is triggered after the record is created and populated with query result. | yii\db\BaseActiveRecord
EVENT_AFTER_INSERT | yii\db\AfterSaveEvent | An event that is triggered after a record is inserted. | yii\db\BaseActiveRecord
EVENT_AFTER_REFRESH | yii\db\Event | An event that is triggered after a record is refreshed. (available since version 2.0.8) | yii\db\BaseActiveRecord
EVENT_AFTER_UPDATE | yii\db\AfterSaveEvent | An event that is triggered after a record is updated. | yii\db\BaseActiveRecord
EVENT_AFTER_VALIDATE | yii\base\Event | An event raised at the end of validate() | yii\base\Model
EVENT_BEFORE_DELETE | yii\base\ModelEvent | An event that is triggered before deleting a record. | yii\db\BaseActiveRecord
EVENT_BEFORE_INSERT | yii\base\ModelEvent | An event that is triggered before inserting a record. | yii\db\BaseActiveRecord
EVENT_BEFORE_UPDATE | yii\base\ModelEvent | An event that is triggered before updating a record. | yii\db\BaseActiveRecord
EVENT_BEFORE_VALIDATE | yii\base\ModelEvent | An event raised at the beginning of validate(). | yii\base\Model
EVENT_INIT | yii\db\Event | An event that is triggered when the record is initialized via init(). | yii\db\BaseActiveRecord

## Constants

Hide inherited constants

Constant | Value | Description | Defined By
--- | --- | --- | ---
OP_ALL | 0x7 | All three operations: insert, update, delete. This is a shortcut of the expression: OP_INSERT | OP_UPDATE | OP_DELETE. | yii\mongodb\ActiveRecord
OP_DELETE | 0x4 | The delete operation. This is mainly used when overriding transactions() to specify which operations are transactional. | yii\mongodb\ActiveRecord
OP_INSERT | 0x1 | The insert operation. This is mainly used when overriding transactions() to specify which operations are transactional. | yii\mongodb\ActiveRecord
OP_UPDATE | 0x2 | The update operation. This is mainly used when overriding transactions() to specify which operations are transactional. | yii\mongodb\ActiveRecord
SCENARIO_DEFAULT | 'default' | The name of the default scenario. | yii\base\Model

## Method Details

Hide inherited methods

LockDocument() public static method

Locks a document of the collection in a transaction (like `select for update` feature in MySQL)

See also https://www.mongodb.com/blog/post/how-to-select--for-update-inside-mongodb-transactions.

public static yii\mongodb\ActiveRecord|null LockDocument ( $id, $lockFieldName, $modifyOptions = [], $db = null )
$id | mixed | A document id (primary key > _id)
$lockFieldName | string | The name of the field you want to lock.
$modifyOptions | array | List of the options in format: optionName => optionValue.
$db | yii\mongodb\Connection | The Mongo connection uses it to execute the query.
return | yii\mongodb\ActiveRecord|null | The locked document. Returns instance of ActiveRecord. Null will be returned if the query does not have a result.

Source code

                    public static function LockDocument($id, $lockFieldName, $modifyOptions = [], $db = null)
    {
        $db = $db ? $db : static::getDb();
        $db->transactionReady('lock document');
        $options['new'] = true;
        return static::find()
            ->where(['_id' => $id])
            ->modify(
                [
                    '$set' =>[$lockFieldName => new ObjectId]
                ],
                $modifyOptions,
                $db
            )
        ;
    }

LockDocumentStubbornly() public static method

Locking a document in stubborn mode on a transaction (like `select for update` feature in MySQL)

See also https://www.mongodb.com/blog/post/how-to-select--for-update-inside-mongodb-transactions notice : you can not use stubborn mode if transaction is started in current session (or use your session with `mySession` parameter).

public static yii\mongodb\ActiveRecord|null LockDocumentStubbornly ( $id, $lockFieldName, $options = [], $db = null )
$id | mixed | A document id (primary key > _id)
$lockFieldName |  |

$options

array

List of options in format: [ 'mySession' => false, # A custom session instance of ClientSession for start a transaction. 'transactionOptions' => [], # New transaction options. see $transactionOptions in Transaction::start() 'modifyOptions' => [], # See $options in ActiveQuery::modify() 'sleep' => 1000000, # A time parameter in microseconds to wait. the default is one second. 'try' => 0, # Maximum count of retry. throw write conflict error after reached this value. the zero default is unlimited. 'lockFieldName' => '_lock' # The name of the field you want to lock. default is '_lock' ]

$db | yii\mongodb\Connection | The Mongo connection uses it to execute the query.
return | yii\mongodb\ActiveRecord|null | Returns the locked document. Returns instance of ActiveRecord. Null will be returned if the query does not have a result. When the total number of attempts to lock the document passes `try`, conflict error will be thrown

Source code

                    public static function LockDocumentStubbornly($id, $lockFieldName, $options = [], $db = null)
    {
        $db = $db ? $db : static::getDb();
        $options = array_replace_recursive(
            [
                'mySession' => false,
                'transactionOptions' => [],
                'modifyOptions' => [],
                'sleep' => 1000000,
                'try' => 0,
            ],
            $options
        );
        $options['modifyOptions']['new'] = true;
        $session = $options['mySession'] ? $options['mySession'] : $db->startSessionOnce();
        if ($session->getInTransaction()) {
            throw new Exception('You can\'t use stubborn lock feature because current connection is in a transaction.');
        }
        // start stubborn
        $tiredCounter = 0;
        StartStubborn:
        $session->transaction->start($options['transactionOptions']);
        try {
            $doc = static::find()
                ->where(['_id' => $id])
                ->modify(
                    [
                        '$set' => [
                            $lockFieldName => new ObjectId
                        ]
                    ],
                    $options['modifyOptions'],
                    $db
                );
            return $doc;
        } catch(\Exception $e) {
            $session->transaction->rollBack();
            $tiredCounter++;
            if ($options['try'] !== 0 && $tiredCounter === $options['try']) {
                throw $e;
            }
            usleep($options['sleep']);
            goto StartStubborn;
        }
    }

__call() public method

Defined in: yii\base\Component::__call()

Calls the named method which is not a class method.

This method will check if any attached behavior has the named method and will execute it if available.

Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

public mixed __call ( $name, $params )
$name | string | The method name
$params | array | Method parameters
return | mixed | The method return value
throws | yii\base\UnknownMethodException | when calling unknown method

Source code

                    public function __call($name, $params)
    {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $object) {
            if ($object->hasMethod($name)) {
                return call_user_func_array([$object, $name], $params);
            }
        }
        throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
    }

__clone() public method

Defined in: yii\base\Model::__clone()

This method is called after the object is created by cloning an existing one.

It removes all behaviors because they are attached to the old object.

public void __clone ( )

Source code

                    public function __clone()
    {
        parent::__clone();
        $this->_errors = null;
        $this->_validators = null;
    }

__construct() public method

Defined in: yii\base\BaseObject::__construct()

Constructor.

The default implementation does two things:

- Initializes the object with the given configuration `$config`.
- Call init().

If this method is overridden in a child class, it is recommended that

- the last parameter of the constructor is a configuration array, like `$config` here.
- call the parent implementation at the end of the constructor.

public void __construct ( $config = [] )
$config | array | Name-value pairs that will be used to initialize the object properties

Source code

                    public function __construct($config = [])
    {
        if (!empty($config)) {
            Yii::configure($this, $config);
        }
        $this->init();
    }

__get() public method

Defined in: yii\db\BaseActiveRecord::__get()

PHP getter magic method.

This method is overridden so that attributes and related objects can be accessed like properties.

See also getAttribute().

public mixed __get ( $name )
$name | string | Property name
return | mixed | Property value
throws | yii\base\InvalidArgumentException | if relation name is wrong

Source code

                    public function __get($name)
    {
        if (array_key_exists($name, $this->_attributes)) {
            return $this->_attributes[$name];
        }
        if ($this->hasAttribute($name)) {
            return null;
        }
        if (array_key_exists($name, $this->_related)) {
            return $this->_related[$name];
        }
        $value = parent::__get($name);
        if ($value instanceof ActiveQueryInterface) {
            $this->setRelationDependencies($name, $value);
            return $this->_related[$name] = $value->findFor($name, $this);
        }
        return $value;
    }

__isset() public method

Defined in: yii\db\BaseActiveRecord::__isset()

Checks if a property value is null.

This method overrides the parent implementation by checking if the named attribute is `null` or not.

public boolean __isset ( $name )
$name | string | The property name or the event name
return | boolean | Whether the property value is null

Source code

                    public function __isset($name)
    {
        try {
            return $this->__get($name) !== null;
        } catch (\Exception $t) {
            return false;
        } catch (\Throwable $e) {
            return false;
        }
    }

__set() public method

Defined in: yii\db\BaseActiveRecord::__set()

PHP setter magic method.

This method is overridden so that AR attributes can be accessed like properties.

public void __set ( $name, $value )
$name | string | Property name
$value | mixed | Property value

Source code

                    public function __set($name, $value)
    {
        if ($this->hasAttribute($name)) {
            if (
                !empty($this->_relationsDependencies[$name])
                && (!array_key_exists($name, $this->_attributes) || $this->_attributes[$name] !== $value)
            ) {
                $this->resetDependentRelations($name);
            }
            $this->_attributes[$name] = $value;
        } else {
            parent::__set($name, $value);
        }
    }

__unset() public method

Defined in: yii\db\BaseActiveRecord::__unset()

Sets a component property to be null.

This method overrides the parent implementation by clearing the specified attribute value.

public void __unset ( $name )
$name | string | The property name or the event name

Source code

                    public function __unset($name)
    {
        if ($this->hasAttribute($name)) {
            unset($this->_attributes[$name]);
            if (!empty($this->_relationsDependencies[$name])) {
                $this->resetDependentRelations($name);
            }
        } elseif (array_key_exists($name, $this->_related)) {
            unset($this->_related[$name]);
        } elseif ($this->getRelation($name, false) === null) {
            parent::__unset($name);
        }
    }

activeAttributes() public method

Defined in: yii\base\Model::activeAttributes()

Returns the attribute names that are subject to validation in the current scenario.

public string[] activeAttributes ( )
return | string[] | Safe attribute names

Source code

                    public function activeAttributes()
    {
        $scenario = $this->getScenario();
        $scenarios = $this->scenarios();
        if (!isset($scenarios[$scenario])) {
            return [];
        }
        $attributes = array_keys(array_flip($scenarios[$scenario]));
        foreach ($attributes as $i => $attribute) {
            if (strncmp($attribute, '!', 1) === 0) {
                $attributes[$i] = substr($attribute, 1);
            }
        }
        return $attributes;
    }

addError() public method

Defined in: yii\base\Model::addError()

Adds a new error to the specified attribute.

public void addError ( $attribute, $error = '' )
$attribute | string | Attribute name
$error | string | New error message

Source code

                    public function addError($attribute, $error = '')
    {
        $this->_errors[$attribute][] = $error;
    }

addErrors() public method (available since version 2.0.2)

Defined in: yii\base\Model::addErrors()

Adds a list of errors.

public void addErrors ( array $items )
$items | array | A list of errors. The array keys must be attribute names. The array values should be error messages. If an attribute has multiple errors, these errors must be given in terms of an array. You may use the result of getErrors() as the value for this parameter.

Source code

                    public function addErrors(array $items)
    {
        foreach ($items as $attribute => $errors) {
            if (is_array($errors)) {
                foreach ($errors as $error) {
                    $this->addError($attribute, $error);
                }
            } else {
                $this->addError($attribute, $errors);
            }
        }
    }

afterDelete() public method

Defined in: yii\db\BaseActiveRecord::afterDelete()

This method is invoked after deleting a record.

The default implementation raises the EVENT_AFTER_DELETE event. You may override this method to do postprocessing after the record is deleted. Make sure you call the parent implementation so that the event is raised properly.

public void afterDelete ( )

Source code

                    public function afterDelete()
    {
        $this->trigger(self::EVENT_AFTER_DELETE);
    }

afterFind() public method

Defined in: yii\db\BaseActiveRecord::afterFind()

This method is called when the AR object is created and populated with the query result.

The default implementation will trigger an EVENT_AFTER_FIND event. When overriding this method, make sure you call the parent implementation to ensure the event is triggered.

public void afterFind ( )

Source code

                    public function afterFind()
    {
        $this->trigger(self::EVENT_AFTER_FIND);
    }

afterRefresh() public method (available since version 2.0.8)

Defined in: yii\db\BaseActiveRecord::afterRefresh()

This method is called when the AR object is refreshed.

The default implementation will trigger an EVENT_AFTER_REFRESH event. When overriding this method, make sure you call the parent implementation to ensure the event is triggered.

public void afterRefresh ( )

Source code

                    public function afterRefresh()
    {
        $this->trigger(self::EVENT_AFTER_REFRESH);
    }

afterSave() public method

Defined in: yii\db\BaseActiveRecord::afterSave()

This method is called at the end of inserting or updating a record.

The default implementation will trigger an EVENT_AFTER_INSERT event when `$insert` is `true`, or an EVENT_AFTER_UPDATE event if `$insert` is `false`. The event class used is yii\db\AfterSaveEvent. When overriding this method, make sure you call the parent implementation so that the event is triggered.

public void afterSave ( $insert, $changedAttributes )
$insert | boolean | Whether this method called while inserting a record. If `false`, it means the method is called while updating a record.

$changedAttributes

array

The old values of attributes that had changed and were saved. You can use this parameter to take action based on the changes made for example send an email when the password had changed or implement audit trail that tracks all the changes. `$changedAttributes` gives you the old attribute values while the active record (`$this`) has already the new, updated values.

Note that no automatic type conversion performed by default. You may use yii\behaviors\AttributeTypecastBehavior to facilitate attribute typecasting. See https://www.yiiframework.com/doc-2.0/guide-db-active-record.html#attributes-typecasting.

Source code

                    public function afterSave($insert, $changedAttributes)
    {
        $this->trigger($insert ? self::EVENT_AFTER_INSERT : self::EVENT_AFTER_UPDATE, new AfterSaveEvent([
            'changedAttributes' => $changedAttributes,
        ]));
    }

afterValidate() public method

Defined in: yii\base\Model::afterValidate()

This method is invoked after validation ends.

The default implementation raises an `afterValidate` event. You may override this method to do postprocessing after validation. Make sure the parent implementation is invoked so that the event can be raised.

public void afterValidate ( )

Source code

                    public function afterValidate()
    {
        $this->trigger(self::EVENT_AFTER_VALIDATE);
    }

attachBehavior() public method

Defined in: yii\base\Component::attachBehavior()

Attaches a behavior to this component.

This method will create the behavior object based on the given configuration. After that, the behavior object will be attached to this component by calling the yii\base\Behavior::attach() method.

See also detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name | string | The name of the behavior.

$behavior

string|array|yii\base\Behavior

The behavior configuration. This can be one of the following:

- a yii\base\Behavior object
- a string specifying the behavior class
- an object configuration array that will be passed to Yii::createObject() to create the behavior object.

return | yii\base\Behavior | The behavior object

Source code

                    public function attachBehavior($name, $behavior)
    {
        $this->ensureBehaviors();
        return $this->attachBehaviorInternal($name, $behavior);
    }

attachBehaviors() public method

Defined in: yii\base\Component::attachBehaviors()

Attaches a list of behaviors to the component.

Each behavior is indexed by its name and should be a yii\base\Behavior object, a string specifying the behavior class, or an configuration array for creating the behavior.

See also attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors | array | List of behaviors to be attached to the component

Source code

                    public function attachBehaviors($behaviors)
    {
        $this->ensureBehaviors();
        foreach ($behaviors as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }

attributeHints() public method (available since version 2.0.4)

Defined in: yii\base\Model::attributeHints()

Returns the attribute hints.

Attribute hints are mainly used for display purpose. For example, given an attribute `isPublic`, we can declare a hint `Whether the post should be visible for not logged in users`, which provides user-friendly description of the attribute meaning and can be displayed to end users.

Unlike label hint will not be generated, if its explicit declaration is omitted.

Note, in order to inherit hints defined in the parent class, a child class needs to merge the parent hints with child hints using functions such as `array_merge()`.

public array attributeHints ( )
return | array | Attribute hints (name => hint)

Source code

                    public function attributeHints()
    {
        return [];
    }

attributeLabels() public method

Defined in: yii\base\Model::attributeLabels()

Returns the attribute labels.

Attribute labels are mainly used for display purpose. For example, given an attribute `firstName`, we can declare a label `First Name` which is more user-friendly and can be displayed to end users.

By default an attribute label is generated using generateAttributeLabel(). This method allows you to explicitly specify attribute labels.

Note, in order to inherit labels defined in the parent class, a child class needs to merge the parent labels with child labels using functions such as `array_merge()`.

See also generateAttributeLabel().

public array attributeLabels ( )
return | array | Attribute labels (name => label)

Source code

                    public function attributeLabels()
    {
        return [];
    }

attributes() public method

Returns the list of all attribute names of the model.

This method must be overridden by child classes to define available attributes. Note: primary key attribute "_id" should be always present in returned array. For example:

    public function attributes()
    {
        return ['_id', 'name', 'address', 'status'];
    }

public array attributes ( )
return | array | List of attribute names.
throws | yii\base\InvalidConfigException | if not implemented

Source code

                    public function attributes()
    {
        throw new InvalidConfigException('The attributes() method of mongodb ActiveRecord has to be implemented by child classes.');
    }

beforeDelete() public method

Defined in: yii\db\BaseActiveRecord::beforeDelete()

This method is invoked before deleting a record.

The default implementation raises the EVENT_BEFORE_DELETE event. When overriding this method, make sure you call the parent implementation like the following:

    public function beforeDelete()
    {
        if (!parent::beforeDelete()) {
            return false;
        }

        // ...custom code here...
        return true;
    }

public boolean beforeDelete ( )
return | boolean | Whether the record should be deleted. Defaults to `true`.

Source code

                    public function beforeDelete()
    {
        $event = new ModelEvent();
        $this->trigger(self::EVENT_BEFORE_DELETE, $event);
        return $event->isValid;
    }

beforeSave() public method

Defined in: yii\db\BaseActiveRecord::beforeSave()

This method is called at the beginning of inserting or updating a record.

The default implementation will trigger an EVENT_BEFORE_INSERT event when `$insert` is `true`, or an EVENT_BEFORE_UPDATE event if `$insert` is `false`. When overriding this method, make sure you call the parent implementation like the following:

    public function beforeSave($insert)
    {
        if (!parent::beforeSave($insert)) {
            return false;
        }

        // ...custom code here...
        return true;
    }

public boolean beforeSave ( $insert )
$insert | boolean | Whether this method called while inserting a record. If `false`, it means the method is called while updating a record.
return | boolean | Whether the insertion or updating should continue. If `false`, the insertion or updating will be cancelled.

Source code

                    public function beforeSave($insert)
    {
        $event = new ModelEvent();
        $this->trigger($insert ? self::EVENT_BEFORE_INSERT : self::EVENT_BEFORE_UPDATE, $event);
        return $event->isValid;
    }

beforeValidate() public method

Defined in: yii\base\Model::beforeValidate()

This method is invoked before validation starts.

The default implementation raises a `beforeValidate` event. You may override this method to do preliminary checks before validation. Make sure the parent implementation is invoked so that the event can be raised.

public boolean beforeValidate ( )
return | boolean | Whether the validation should be executed. Defaults to true. If false is returned, the validation will stop and the model is considered invalid.

Source code

                    public function beforeValidate()
    {
        $event = new ModelEvent();
        $this->trigger(self::EVENT_BEFORE_VALIDATE, $event);
        return $event->isValid;
    }

behaviors() public method

Defined in: yii\base\Component::behaviors()

Returns a list of behaviors that this component should behave as.

Child classes may override this method to specify the behaviors they want to behave as.

The return value of this method should be an array of behavior objects or configurations indexed by behavior names. A behavior configuration can be either a string specifying the behavior class or an array of the following structure:

    'behaviorName' => [
        'class' => 'BehaviorClass',
        'property1' => 'value1',
        'property2' => 'value2',
    ]

Note that a behavior class must extend from yii\base\Behavior. Behaviors can be attached using a name or anonymously. When a name is used as the array key, using this name, the behavior can later be retrieved using getBehavior() or be detached using detachBehavior(). Anonymous behaviors can not be retrieved or detached.

Behaviors declared in this method will be attached to the component automatically (on demand).

public array behaviors ( )
return | array | The behavior configurations.

Source code

                    public function behaviors()
    {
        return [];
    }

canGetProperty() public method

Defined in: yii\db\BaseActiveRecord::canGetProperty()

Returns a value indicating whether a property can be read.

A property can be read if:

- the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);
- an attached behavior has a readable property of the given name (when `$checkBehaviors` is true).

public boolean canGetProperty ( $name, $checkVars = true, $checkBehaviors = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
$checkBehaviors | boolean | Whether to treat behaviors' properties as properties of this component
return | boolean | Whether the property can be read

Source code

                    public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
    {
        if (parent::canGetProperty($name, $checkVars, $checkBehaviors)) {
            return true;
        }
        try {
            return $this->hasAttribute($name);
        } catch (\Exception $e) {
            // `hasAttribute()` may fail on base/abstract classes in case automatic attribute list fetching used
            return false;
        }
    }

canSetOldAttribute() public method

Defined in: yii\db\BaseActiveRecord::canSetOldAttribute()

Returns if the old named attribute can be set.

See also setOldAttribute().

public boolean canSetOldAttribute ( $name )
$name | string | The attribute name
return | boolean | Whether the old attribute can be set

Source code

                    public function canSetOldAttribute($name)
    {
        return (isset($this->_oldAttributes[$name]) || $this->hasAttribute($name));
    }

canSetProperty() public method

Defined in: yii\db\BaseActiveRecord::canSetProperty()

Returns a value indicating whether a property can be set.

A property can be written if:

- the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);
- an attached behavior has a writable property of the given name (when `$checkBehaviors` is true).

public boolean canSetProperty ( $name, $checkVars = true, $checkBehaviors = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
$checkBehaviors | boolean | Whether to treat behaviors' properties as properties of this component
return | boolean | Whether the property can be written

Source code

                    public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
    {
        if (parent::canSetProperty($name, $checkVars, $checkBehaviors)) {
            return true;
        }
        try {
            return $this->hasAttribute($name);
        } catch (\Exception $e) {
            // `hasAttribute()` may fail on base/abstract classes in case automatic attribute list fetching used
            return false;
        }
    }

className() public static method
Deprecated since 2.0.14. On PHP >=5.5, use `::class` instead.

Defined in: yii\base\BaseObject::className()

Returns the fully qualified name of this class.

public static string className ( )
return | string | The fully qualified name of this class.

Source code

                    public static function className()
    {
        return get_called_class();
    }

clearErrors() public method

Defined in: yii\base\Model::clearErrors()

Removes errors for all attributes or a single attribute.

public void clearErrors ( $attribute = null )
$attribute | string|null | Attribute name. Use null to remove errors for all attributes.

Source code

                    public function clearErrors($attribute = null)
    {
        if ($attribute === null) {
            $this->_errors = [];
        } else {
            unset($this->_errors[$attribute]);
        }
    }

collectionName() public static method

Declares the name of the Mongo collection associated with this AR class.

Collection name can be either a string or array:

- if string considered as the name of the collection inside the default database.
- if array - first element considered as the name of the database, second - as name of collection inside that database

By default this method returns the class name as the collection name by calling yii\helpers\Inflector::camel2id(). For example, 'Customer' becomes 'customer', and 'OrderItem' becomes 'order_item'. You may override this method if the collection is not named after this convention.

public static string|array collectionName ( )
return | string|array | The collection name

Source code

                    public static function collectionName()
    {
        return Inflector::camel2id(StringHelper::basename(get_called_class()), '_');
    }

createRelationQuery() protected method (available since version 2.0.12)

Defined in: yii\db\BaseActiveRecord::createRelationQuery()

Creates a query instance for `has-one` or `has-many` relation.

See also:

- hasOne()
- hasMany()

protected yii\db\ActiveQueryInterface createRelationQuery ( $class, $link, $multiple )
$class | string | The class name of the related record.
$link | array | The primary-foreign key constraint.
$multiple | boolean | Whether this query represents a relation to more than one record.
return | yii\db\ActiveQueryInterface | The relational query object.

Source code

                    protected function createRelationQuery($class, $link, $multiple)
    {
        /* @var $class ActiveRecordInterface */
        /* @var $query ActiveQuery */
        $query = $class::find();
        $query->primaryModel = $this;
        $query->link = $link;
        $query->multiple = $multiple;
        return $query;
    }

createValidators() public method

Defined in: yii\base\Model::createValidators()

Creates validator objects based on the validation rules specified in rules().

Unlike getValidators(), each time this method is called, a new list of validators will be returned.

public ArrayObject createValidators ( )
return | ArrayObject | Validators
throws | yii\base\InvalidConfigException | if any validation rule configuration is invalid

Source code

                    public function createValidators()
    {
        $validators = new ArrayObject();
        foreach ($this->rules() as $rule) {
            if ($rule instanceof Validator) {
                $validators->append($rule);
            } elseif (is_array($rule) && isset($rule[0], $rule[1])) { // attributes, validator type
                $validator = Validator::createValidator($rule[1], $this, (array) $rule[0], array_slice($rule, 2));
                $validators->append($validator);
            } else {
                throw new InvalidConfigException('Invalid validation rule: a rule must specify both attribute names and validator type.');
            }
        }
        return $validators;
    }

delete() public method

Deletes the document corresponding to this active record from the collection.

This method performs the following steps in order:

1. call beforeDelete(). If the method returns false, it will skip the rest of the steps;
2. delete the document from the collection;
3. call afterDelete().

In the above step 1 and 3, events named EVENT_BEFORE_DELETE and EVENT_AFTER_DELETE will be raised by the corresponding methods.

public integer|boolean delete ( )
return | integer|boolean | The number of documents deleted, or false if the deletion is unsuccessful for some reason. Note that it is possible the number of documents deleted is 0, even though the deletion execution is successful.
throws | yii\db\StaleObjectException | if optimistic locking is enabled and the data being deleted is outdated.
throws | Exception | in case delete failed.

Source code

                    public function delete()
    {
        if (!$this->isTransactional(self::OP_DELETE)) {
            return $this->deleteInternal();
        }
        $result = null;
        static::getDb()->transaction(function() use (&$result) {
            $result = $this->deleteInternal();
        });
        return $result;
    }

deleteAll() public static method

Deletes documents in the collection using the provided conditions.

WARNING: If you do not specify any condition, this method will delete documents rows in the collection.

For example, to delete all customers whose status is 3:

    Customer::deleteAll(['status' => 3]);

public static integer deleteAll ( $condition = [], $options = [] )
$condition | array | Description of the objects to delete. Please refer to yii\mongodb\Query::where() on how to specify this parameter.
$options | array | List of options in format: optionName => optionValue.
return | integer | The number of documents deleted.

Source code

                    public static function deleteAll($condition = [], $options = [])
    {
        return static::getCollection()->remove($condition, $options);
    }

deleteInternal() protected method

See also yii\mongodb\ActiveRecord::delete().

protected void deleteInternal ( )
throws | yii\db\StaleObjectException |

Source code

                    protected function deleteInternal()
    {
        if (!$this->beforeDelete()) {
            return false;
        }
        // we do not check the return value of deleteAll() because it's possible
        // the record is already deleted in the database and thus the method will return 0
        $condition = $this->getOldPrimaryKey(true);
        $lock = $this->optimisticLock();
        if ($lock !== null) {
            $condition[$lock] = $this->$lock;
        }
        $result = static::getCollection()->remove($condition);
        if ($lock !== null && !$result) {
            throw new StaleObjectException('The object being deleted is outdated.');
        }
        $this->setOldAttributes(null);
        $this->afterDelete();
        return $result;
    }

detachBehavior() public method

Defined in: yii\base\Component::detachBehavior()

Detaches a behavior from the component.

The behavior's yii\base\Behavior::detach() method will be invoked.

public yii\base\Behavior|null detachBehavior ( $name )
$name | string | The behavior's name.
return | yii\base\Behavior|null | The detached behavior. Null if the behavior does not exist.

Source code

                    public function detachBehavior($name)
    {
        $this->ensureBehaviors();
        if (isset($this->_behaviors[$name])) {
            $behavior = $this->_behaviors[$name];
            unset($this->_behaviors[$name]);
            $behavior->detach();
            return $behavior;
        }
        return null;
    }

detachBehaviors() public method

Defined in: yii\base\Component::detachBehaviors()

Detaches all behaviors from the component.

public void detachBehaviors ( )

Source code

                    public function detachBehaviors()
    {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $name => $behavior) {
            $this->detachBehavior($name);
        }
    }

ensureBehaviors() public method

Defined in: yii\base\Component::ensureBehaviors()

Makes sure that the behaviors declared in behaviors() are attached to this component.

public void ensureBehaviors ( )

Source code

                    public function ensureBehaviors()
    {
        if ($this->_behaviors === null) {
            $this->_behaviors = [];
            foreach ($this->behaviors() as $name => $behavior) {
                $this->attachBehaviorInternal($name, $behavior);
            }
        }
    }

equals() public method

Returns a value indicating whether the given active record is the same as the current one.

The comparison is made by comparing the collection names and the primary key values of the two active records. If one of the records is new they are also considered not equal.

public boolean equals ( $record )
$record | yii\mongodb\ActiveRecord | Record to compare to
return | boolean | Whether the two active records refer to the same row in the same Mongo collection.

Source code

                    public function equals($record)
    {
        if ($this->isNewRecord || $record->isNewRecord) {
            return false;
        }
        return $this->collectionName() === $record->collectionName() && (string) $this->getPrimaryKey() === (string) $record->getPrimaryKey();
    }

extraFields() public method

Defined in: yii\base\ArrayableTrait::extraFields()

Returns the list of fields that can be expanded further and returned by toArray().

This method is similar to fields() except that the list of fields returned by this method are not returned by default by toArray(). Only when field names to be expanded are explicitly specified when calling toArray(), will their values be exported.

The default implementation returns an empty array.

You may override this method to return a list of expandable fields based on some context information (e.g. the current application user).

See also:

- toArray()
- fields()

public array extraFields ( )
return | array | The list of expandable field names or field definitions. Please refer to fields() on the format of the return value.

Source code

                    public function extraFields()
    {
        return [];
    }

extractFieldsFor() protected method (available since version 2.0.14)

Defined in: yii\base\ArrayableTrait::extractFieldsFor()

Extract nested fields from a fields collection for a given root field Nested fields are separated with dots (.). e.g: "item.id" The previous example would extract "id".

protected array extractFieldsFor ( array $fields, $rootField )
$fields | array | The fields requested for extraction
$rootField | string | The root field for which we want to extract the nested fields
return | array | Nested fields extracted for the given field

Source code

                    protected function extractFieldsFor(array $fields, $rootField)
    {
        $result = [];
        foreach ($fields as $field) {
            if (0 === strpos($field, "{$rootField}.")) {
                $result[] = preg_replace('/^' . preg_quote($rootField, '/') . '\./i', '', $field);
            }
        }
        return array_unique($result);
    }

extractRootFields() protected method (available since version 2.0.14)

Defined in: yii\base\ArrayableTrait::extractRootFields()

Extracts the root field names from nested fields.

Nested fields are separated with dots (.). e.g: "item.id" The previous example would extract "item".

protected array extractRootFields ( array $fields )
$fields | array | The fields requested for extraction
return | array | Root fields extracted from the given nested fields

Source code

                    protected function extractRootFields(array $fields)
    {
        $result = [];
        foreach ($fields as $field) {
            $result[] = current(explode('.', $field, 2));
        }
        if (in_array('*', $result, true)) {
            $result = [];
        }
        return array_unique($result);
    }

fields() public method

Defined in: yii\base\ArrayableTrait::fields()

Returns the list of fields that should be returned by default by toArray() when no specific fields are specified.

A field is a named element in the returned array by toArray().

This method should return an array of field names or field definitions. If the former, the field name will be treated as an object property name whose value will be used as the field value. If the latter, the array key should be the field name while the array value should be the corresponding field definition which can be either an object property name or a PHP callable returning the corresponding field value. The signature of the callable should be:

    function ($model, $field) {
        // return field value
    }

For example, the following code declares four fields:

- `email`: the field name is the same as the property name `email`;
- `firstName` and `lastName`: the field names are `firstName` and `lastName`, and their values are obtained from the `first_name` and `last_name` properties;
- `fullName`: the field name is `fullName`. Its value is obtained by concatenating `first_name` and `last_name`.

    return [
        'email',
        'firstName' => 'first_name',
        'lastName' => 'last_name',
        'fullName' => function () {
            return $this->first_name . ' ' . $this->last_name;
        },
    ];

In this method, you may also want to return different lists of fields based on some context information. For example, depending on the privilege of the current application user, you may return different sets of visible fields or filter out some fields.

The default implementation of this method returns the public object member variables indexed by themselves.

See also toArray().

public array fields ( )
return | array | The list of field names or field definitions.

Source code

                    public function fields()
    {
        $fields = array_keys(Yii::getObjectVars($this));
        return array_combine($fields, $fields);
    }

find() public static method

Creates an yii\db\ActiveQueryInterface instance for query purpose.

The returned yii\db\ActiveQueryInterface instance can be further customized by calling methods defined in yii\db\ActiveQueryInterface before `one()` or `all()` is called to return populated ActiveRecord instances. For example,

    // find the customer whose ID is 1
    $customer = Customer::find()->where(['id' => 1])->one();

    // find all active customers and order them by their age:
    $customers = Customer::find()
        ->where(['status' => 1])
        ->orderBy('age')
        ->all();

This method is also called by yii\db\BaseActiveRecord::hasOne() and yii\db\BaseActiveRecord::hasMany() to create a relational query.

You may override this method to return a customized query. For example,

    class Customer extends ActiveRecord
    {
        public static function find()
        {
            // use CustomerQuery instead of the default ActiveQuery
            return new CustomerQuery(get_called_class());
        }
    }

The following code shows how to apply a default condition for all queries:

    class Customer extends ActiveRecord
    {
        public static function find()
        {
            return parent::find()->where(['deleted' => false]);
        }
    }

    // Use andWhere()/orWhere() to apply the default condition
    // SELECT FROM customer WHERE `deleted`=:deleted AND age>30
    $customers = Customer::find()->andWhere('age>30')->all();

    // Use where() to ignore the default condition
    // SELECT FROM customer WHERE age>30
    $customers = Customer::find()->where('age>30')->all();

public static yii\mongodb\ActiveQuery find ( )
return | yii\mongodb\ActiveQuery | The newly created yii\mongodb\ActiveQuery instance.

Source code

                    public static function find()
    {
        return Yii::createObject(ActiveQuery::className(), [get_called_class()]);
    }

findAll() public static method

Defined in: yii\db\BaseActiveRecord::findAll()

Returns a list of active record models that match the specified primary key value(s) or a set of column values.

The method accepts:

- a scalar value (integer or string): query by a single primary key value and return an array containing the corresponding record (or an empty array if not found).
- a non-associative array: query by a list of primary key values and return the corresponding records (or an empty array if none was found). Note that an empty condition will result in an empty result as it will be interpreted as a search for primary keys and not an empty `WHERE` condition.
- an associative array of name-value pairs: query by a set of attribute values and return an array of records matching all of them (or an empty array if none was found). Note that `['id' => 1, 2]` is treated as a non-associative array. Column names are limited to current records table columns for SQL DBMS, or filtered otherwise to be limted to simple filter conditions.
- a yii\db\Expression: The expression will be used directly. (@since 2.0.37)

This method will automatically call the `all()` method and return an array of ActiveRecord instances.

> Note: As this is a short-hand method only, using more complex conditions, like ['!=', 'id', 1] will not work. If you need to specify more complex conditions, use find() in combination with where() instead.

See the following code for usage examples:

    // find the customers whose primary key value is 10
    $customers = Customer::findAll(10);

    // the above code is equivalent to:
    $customers = Customer::find()->where(['id' => 10])->all();

    // find the customers whose primary key value is 10, 11 or 12.
    $customers = Customer::findAll([10, 11, 12]);

    // the above code is equivalent to:
    $customers = Customer::find()->where(['id' => [10, 11, 12]])->all();

    // find customers whose age is 30 and whose status is 1
    $customers = Customer::findAll(['age' => 30, 'status' => 1]);

    // the above code is equivalent to:
    $customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();

If you need to pass user input to this method, make sure the input value is scalar or in case of array condition, make sure the array structure can not be changed from the outside:

    // yii\web\Controller ensures that $id is scalar
    public function actionView($id)
    {
        $model = Post::findOne($id);
        // ...
    }

    // explicitly specifying the colum to search, passing a scalar or array here will always result in finding a single record
    $model = Post::findOne(['id' => Yii::$app->request->get('id')]);

    // do NOT use the following code! it is possible to inject an array condition to filter by arbitrary column values!
    $model = Post::findOne(Yii::$app->request->get('id'));

public static static[] findAll ( $condition )
$condition | mixed | Primary key value or a set of column values
return | static[] | An array of ActiveRecord instances, or an empty array if nothing matches.

Source code

                    public static function findAll($condition)
    {
        return static::findByCondition($condition)->all();
    }

findOne() public static method

Defined in: yii\db\BaseActiveRecord::findOne()

Returns a single active record model instance by a primary key or an array of column values.

The method accepts:

- a scalar value (integer or string): query by a single primary key value and return the corresponding record (or `null` if not found).
- a non-associative array: query by a list of primary key values and return the first record (or `null` if not found).
- an associative array of name-value pairs: query by a set of attribute values and return a single record matching all of them (or `null` if not found). Note that `['id' => 1, 2]` is treated as a non-associative array. Column names are limited to current records table columns for SQL DBMS, or filtered otherwise to be limited to simple filter conditions.
- a yii\db\Expression: The expression will be used directly. (@since 2.0.37)

That this method will automatically call the `one()` method and return an ActiveRecord instance.

> Note: As this is a short-hand method only, using more complex conditions, like ['!=', 'id', 1] will not work. If you need to specify more complex conditions, use find() in combination with where() instead.

See the following code for usage examples:

    // find a single customer whose primary key value is 10
    $customer = Customer::findOne(10);

    // the above code is equivalent to:
    $customer = Customer::find()->where(['id' => 10])->one();

    // find the customers whose primary key value is 10, 11 or 12.
    $customers = Customer::findOne([10, 11, 12]);

    // the above code is equivalent to:
    $customers = Customer::find()->where(['id' => [10, 11, 12]])->one();

    // find the first customer whose age is 30 and whose status is 1
    $customer = Customer::findOne(['age' => 30, 'status' => 1]);

    // the above code is equivalent to:
    $customer = Customer::find()->where(['age' => 30, 'status' => 1])->one();

If you need to pass user input to this method, make sure the input value is scalar or in case of array condition, make sure the array structure can not be changed from the outside:

    // yii\web\Controller ensures that $id is scalar
    public function actionView($id)
    {
        $model = Post::findOne($id);
        // ...
    }

    // explicitly specifying the colum to search, passing a scalar or array here will always result in finding a single record
    $model = Post::findOne(['id' => Yii::$app->request->get('id')]);

    // do NOT use the following code! it is possible to inject an array condition to filter by arbitrary column values!
    $model = Post::findOne(Yii::$app->request->get('id'));

public static static|null findOne ( $condition )
$condition | mixed | Primary key value or a set of column values
return | static|null | ActiveRecord instance matching the condition, or `null` if nothing matches.

Source code

                    public static function findOne($condition)
    {
        return static::findByCondition($condition)->one();
    }

formName() public method

Defined in: yii\base\Model::formName()

Returns the form name that this model class should use.

The form name is mainly used by yii\widgets\ActiveForm to determine how to name the input fields for the attributes in a model. If the form name is "A" and an attribute name is "b", then the corresponding input name would be "A[b]". If the form name is an empty string, then the input name would be "b".

The purpose of the above naming schema is that for forms which contain multiple different models, the attributes of each model are grouped in sub-arrays of the POST-data and it is easier to differentiate between them.

By default, this method returns the model class name (without the namespace part) as the form name. You may override it when the model is used in different forms.

See also load().

public string formName ( )
return | string | The form name of this model class.
throws | yii\base\InvalidConfigException | when form is defined with anonymous class and `formName()` method is not overridden.

Source code

                    public function formName()
    {
        $reflector = new ReflectionClass($this);
        if (PHP_VERSION_ID >= 70000 && $reflector->isAnonymous()) {
            throw new InvalidConfigException('The "formName()" method should be explicitly defined for anonymous models');
        }
        return $reflector->getShortName();
    }

generateAttributeLabel() public method

Defined in: yii\base\Model::generateAttributeLabel()

Generates a user friendly attribute label based on the give attribute name.

This is done by replacing underscores, dashes and dots with blanks and changing the first letter of each word to upper case. For example, 'department_name' or 'DepartmentName' will generate 'Department Name'.

public string generateAttributeLabel ( $name )
$name | string | The column name
return | string | The attribute label

Source code

                    public function generateAttributeLabel($name)
    {
        return Inflector::camel2words($name, true);
    }

getActiveValidators() public method

Defined in: yii\base\Model::getActiveValidators()

Returns the validators applicable to the current $scenario.

public yii\validators\Validator[] getActiveValidators ( $attribute = null )
$attribute | string|null | The name of the attribute whose applicable validators should be returned. If this is null, the validators for ALL attributes in the model will be returned.
return | yii\validators\Validator[] | The validators applicable to the current $scenario.

Source code

                    public function getActiveValidators($attribute = null)
    {
        $activeAttributes = $this->activeAttributes();
        if ($attribute !== null && !in_array($attribute, $activeAttributes, true)) {
            return [];
        }
        $scenario = $this->getScenario();
        $validators = [];
        foreach ($this->getValidators() as $validator) {
            if ($attribute === null) {
                $validatorAttributes = $validator->getValidationAttributes($activeAttributes);
                $attributeValid = !empty($validatorAttributes);
            } else {
                $attributeValid = in_array($attribute, $validator->getValidationAttributes($attribute), true);
            }
            if ($attributeValid && $validator->isActive($scenario)) {
                $validators[] = $validator;
            }
        }
        return $validators;
    }

getAttribute() public method

Defined in: yii\db\BaseActiveRecord::getAttribute()

Returns the named attribute value.

If this record is the result of a query and the attribute is not loaded, `null` will be returned.

See also hasAttribute().

public mixed getAttribute ( $name )
$name | string | The attribute name
return | mixed | The attribute value. `null` if the attribute is not set or does not exist.

Source code

                    public function getAttribute($name)
    {
        return isset($this->_attributes[$name]) ? $this->_attributes[$name] : null;
    }

getAttributeHint() public method (available since version 2.0.4)

Defined in: yii\db\BaseActiveRecord::getAttributeHint()

Returns the text hint for the specified attribute.

If the attribute looks like `relatedModel.attribute`, then the attribute will be received from the related model.

See also attributeHints().

public string getAttributeHint ( $attribute )
$attribute | string | The attribute name
return | string | The attribute hint

Source code

                    public function getAttributeHint($attribute)
    {
        $hints = $this->attributeHints();
        if (isset($hints[$attribute])) {
            return $hints[$attribute];
        } elseif (strpos($attribute, '.')) {
            $attributeParts = explode('.', $attribute);
            $neededAttribute = array_pop($attributeParts);
            $relatedModel = $this;
            foreach ($attributeParts as $relationName) {
                if ($relatedModel->isRelationPopulated($relationName) && $relatedModel->$relationName instanceof self) {
                    $relatedModel = $relatedModel->$relationName;
                } else {
                    try {
                        $relation = $relatedModel->getRelation($relationName);
                    } catch (InvalidParamException $e) {
                        return '';
                    }
                    /* @var $modelClass ActiveRecordInterface */
                    $modelClass = $relation->modelClass;
                    $relatedModel = $modelClass::instance();
                }
            }
            $hints = $relatedModel->attributeHints();
            if (isset($hints[$neededAttribute])) {
                return $hints[$neededAttribute];
            }
        }
        return '';
    }

getAttributeLabel() public method

Defined in: yii\db\BaseActiveRecord::getAttributeLabel()

Returns the text label for the specified attribute.

The attribute may be specified in a dot format to retrieve the label from related model or allow this model to override the label defined in related model. For example, if the attribute is specified as 'relatedModel1.relatedModel2.attr' the function will return the first label definition it can find in the following order:

- the label for 'relatedModel1.relatedModel2.attr' defined in attributeLabels() of this model;
- the label for 'relatedModel2.attr' defined in related model represented by relation 'relatedModel1' of this model;
- the label for 'attr' defined in related model represented by relation 'relatedModel2' of relation 'relatedModel1'. If no label definition was found then the value of $this->generateAttributeLabel('relatedModel1.relatedModel2.attr') will be returned.

See also:

- attributeLabels()
- generateAttributeLabel()

public string getAttributeLabel ( $attribute )
$attribute | string | The attribute name
return | string | The attribute label

Source code

                    public function getAttributeLabel($attribute)
    {
        $model = $this;
        $modelAttribute = $attribute;
        for (;;) {
            $labels = $model->attributeLabels();
            if (isset($labels[$modelAttribute])) {
                return $labels[$modelAttribute];
            }
            $parts = explode('.', $modelAttribute, 2);
            if (count($parts) < 2) {
                break;
            }
            list ($relationName, $modelAttribute) = $parts;
            if ($model->isRelationPopulated($relationName) && $model->$relationName instanceof self) {
                $model = $model->$relationName;
            } else {
                try {
                    $relation = $model->getRelation($relationName);
                } catch (InvalidArgumentException $e) {
                    break;
                }
                /* @var $modelClass ActiveRecordInterface */
                $modelClass = $relation->modelClass;
                $model = $modelClass::instance();
            }
        }
        return $this->generateAttributeLabel($attribute);
    }

getAttributes() public method

Defined in: yii\base\Model::getAttributes()

Returns attribute values.

public array getAttributes ( $names = null, $except = [] )
$names | array|null | List of attributes whose value needs to be returned. Defaults to null, meaning all attributes listed in attributes() will be returned. If it is an array, only the attributes in the array will be returned.
$except | array | List of attributes whose value should NOT be returned.
return | array | Attribute values (name => value).

Source code

                    public function getAttributes($names = null, $except = [])
    {
        $values = [];
        if ($names === null) {
            $names = $this->attributes();
        }
        foreach ($names as $name) {
            $values[$name] = $this->$name;
        }
        foreach ($except as $name) {
            unset($values[$name]);
        }
        return $values;
    }

getBehavior() public method

Defined in: yii\base\Component::getBehavior()

Returns the named behavior object.

public yii\base\Behavior|null getBehavior ( $name )
$name | string | The behavior name
return | yii\base\Behavior|null | The behavior object, or null if the behavior does not exist

Source code

                    public function getBehavior($name)
    {
        $this->ensureBehaviors();
        return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
    }

getBehaviors() public method

Defined in: yii\base\Component::getBehaviors()

Returns all behaviors attached to this component.

public yii\base\Behavior[] getBehaviors ( )
return | yii\base\Behavior[] | List of behaviors attached to this component

Source code

                    public function getBehaviors()
    {
        $this->ensureBehaviors();
        return $this->_behaviors;
    }

getCollection() public static method

Return the Mongo collection instance for this AR class.

public static yii\mongodb\Collection getCollection ( )
return | yii\mongodb\Collection | Collection instance.

Source code

                    public static function getCollection()
    {
        return static::getDb()->getCollection(static::collectionName());
    }

getDb() public static method

Returns the Mongo connection used by this AR class.

By default, the "mongodb" application component is used as the Mongo connection. You may override this method if you want to use a different database connection.

public static yii\mongodb\Connection getDb ( )
return | yii\mongodb\Connection | The database connection used by this AR class.

Source code

                    public static function getDb()
    {
        return Yii::$app->get('mongodb');
    }

getDirtyAttributes() public method

Defined in: yii\db\BaseActiveRecord::getDirtyAttributes()

Returns the attribute values that have been modified since they are loaded or saved most recently.

The comparison of new and old values is made for identical values using `===`.

public array getDirtyAttributes ( $names = null )
$names | string[]|null | The names of the attributes whose values may be returned if they are changed recently. If null, attributes() will be used.
return | array | The changed attribute values (name-value pairs)

Source code

                    public function getDirtyAttributes($names = null)
    {
        if ($names === null) {
            $names = $this->attributes();
        }
        $names = array_flip($names);
        $attributes = [];
        if ($this->_oldAttributes === null) {
            foreach ($this->_attributes as $name => $value) {
                if (isset($names[$name])) {
                    $attributes[$name] = $value;
                }
            }
        } else {
            foreach ($this->_attributes as $name => $value) {
                if (isset($names[$name]) && (!array_key_exists($name, $this->_oldAttributes) || $this->isValueDifferent($value, $this->_oldAttributes[$name]))) {
                    $attributes[$name] = $value;
                }
            }
        }
        return $attributes;
    }

getErrorSummary() public method (available since version 2.0.14)

Defined in: yii\base\Model::getErrorSummary()

Returns the errors for all attributes as a one-dimensional array.

See also:

- getErrors()
- getFirstErrors()

public array getErrorSummary ( $showAllErrors )
$showAllErrors | boolean | Boolean, if set to true every error message for each attribute will be shown otherwise only the first error message for each attribute will be shown.
return | array | Errors for all attributes as a one-dimensional array. Empty array is returned if no error.

Source code

                    public function getErrorSummary($showAllErrors)
    {
        $lines = [];
        $errors = $showAllErrors ? $this->getErrors() : $this->getFirstErrors();
        foreach ($errors as $es) {
            $lines = array_merge($lines, (array)$es);
        }
        return $lines;
    }

getErrors() public method

Defined in: yii\base\Model::getErrors()

Returns the errors for all attributes or a single attribute.

See also:

- getFirstErrors()
- getFirstError()

public array getErrors ( $attribute = null )
$attribute | string|null | Attribute name. Use null to retrieve errors for all attributes.

return

array

Errors for all attributes or the specified attribute. Empty array is returned if no error. See getErrors() for detailed description. Note that when returning errors for all attributes, the result is a two-dimensional array, like the following:

    [
        'username' => [
            'Username is required.',
            'Username must contain only word characters.',
        ],
        'email' => [
            'Email address is invalid.',
        ]
    ]

Source code

                    public function getErrors($attribute = null)
    {
        if ($attribute === null) {
            return $this->_errors === null ? [] : $this->_errors;
        }
        return isset($this->_errors[$attribute]) ? $this->_errors[$attribute] : [];
    }

getFirstError() public method

Defined in: yii\base\Model::getFirstError()

Returns the first error of the specified attribute.

See also:

- getErrors()
- getFirstErrors()

public string|null getFirstError ( $attribute )
$attribute | string | Attribute name.
return | string|null | The error message. Null is returned if no error.

Source code

                    public function getFirstError($attribute)
    {
        return isset($this->_errors[$attribute]) ? reset($this->_errors[$attribute]) : null;
    }

getFirstErrors() public method

Defined in: yii\base\Model::getFirstErrors()

Returns the first error of every attribute in the model.

See also:

- getErrors()
- getFirstError()

public array getFirstErrors ( )
return | array | The first errors. The array keys are the attribute names, and the array values are the corresponding error messages. An empty array will be returned if there is no error.

Source code

                    public function getFirstErrors()
    {
        if (empty($this->_errors)) {
            return [];
        }
        $errors = [];
        foreach ($this->_errors as $name => $es) {
            if (!empty($es)) {
                $errors[$name] = reset($es);
            }
        }
        return $errors;
    }

getIsNewRecord() public method

Defined in: yii\db\BaseActiveRecord::getIsNewRecord()

Returns a value indicating whether the current record is new.

public boolean getIsNewRecord ( )
return | boolean | Whether the record is new and should be inserted when calling save().

Source code

                    public function getIsNewRecord()
    {
        return $this->_oldAttributes === null;
    }

getIterator() public method

Defined in: yii\base\Model::getIterator()

Returns an iterator for traversing the attributes in the model.

This method is required by the interface IteratorAggregate.

public ArrayIterator getIterator ( )
return | ArrayIterator | An iterator for traversing the items in the list.

Source code

                    #[\ReturnTypeWillChange]
    public function getIterator()
    {
        $attributes = $this->getAttributes();
        return new ArrayIterator($attributes);
    }

getOldAttribute() public method

Defined in: yii\db\BaseActiveRecord::getOldAttribute()

Returns the old value of the named attribute.

If this record is the result of a query and the attribute is not loaded, `null` will be returned.

See also hasAttribute().

public mixed getOldAttribute ( $name )
$name | string | The attribute name
return | mixed | The old attribute value. `null` if the attribute is not loaded before or does not exist.

Source code

                    public function getOldAttribute($name)
    {
        return isset($this->_oldAttributes[$name]) ? $this->_oldAttributes[$name] : null;
    }

getOldAttributes() public method

Defined in: yii\db\BaseActiveRecord::getOldAttributes()

Returns the old attribute values.

public array getOldAttributes ( )
return | array | The old attribute values (name-value pairs)

Source code

                    public function getOldAttributes()
    {
        return $this->_oldAttributes === null ? [] : $this->_oldAttributes;
    }

getOldPrimaryKey() public method

Defined in: yii\db\BaseActiveRecord::getOldPrimaryKey()

Returns the old primary key value(s).

This refers to the primary key value that is populated into the record after executing a find method (e.g. find(), findOne()). The value remains unchanged even if the primary key attribute is manually assigned with a different value.

public mixed getOldPrimaryKey ( $asArray = false )
$asArray | boolean | Whether to return the primary key value as an array. If `true`, the return value will be an array with column name as key and column value as value. If this is `false` (default), a scalar value will be returned for non-composite primary key.
return | mixed | The old primary key value. An array (column name => column value) is returned if the primary key is composite or `$asArray` is `true`. A string is returned otherwise (null will be returned if the key value is null).
throws | yii\db\Exception | if the AR model does not have a primary key

Source code

                    public function getOldPrimaryKey($asArray = false)
    {
        $keys = static::primaryKey();
        if (empty($keys)) {
            throw new Exception(get_class($this) . ' does not have a primary key. You should either define a primary key for the corresponding table or override the primaryKey() method.');
        }
        if (!$asArray && count($keys) === 1) {
            return isset($this->_oldAttributes[$keys[0]]) ? $this->_oldAttributes[$keys[0]] : null;
        }
        $values = [];
        foreach ($keys as $name) {
            $values[$name] = isset($this->_oldAttributes[$name]) ? $this->_oldAttributes[$name] : null;
        }
        return $values;
    }

getPrimaryKey() public method

Defined in: yii\db\BaseActiveRecord::getPrimaryKey()

Returns the primary key value(s).

public mixed getPrimaryKey ( $asArray = false )
$asArray | boolean | Whether to return the primary key value as an array. If `true`, the return value will be an array with column names as keys and column values as values. Note that for composite primary keys, an array will always be returned regardless of this parameter value.
return | mixed | The primary key value. An array (column name => column value) is returned if the primary key is composite or `$asArray` is `true`. A string is returned otherwise (null will be returned if the key value is null).

Source code

                    public function getPrimaryKey($asArray = false)
    {
        $keys = static::primaryKey();
        if (!$asArray && count($keys) === 1) {
            return isset($this->_attributes[$keys[0]]) ? $this->_attributes[$keys[0]] : null;
        }
        $values = [];
        foreach ($keys as $name) {
            $values[$name] = isset($this->_attributes[$name]) ? $this->_attributes[$name] : null;
        }
        return $values;
    }

getRelatedRecords() public method

Defined in: yii\db\BaseActiveRecord::getRelatedRecords()

Returns all populated related records.

See also getRelation().

public array getRelatedRecords ( )
return | array | An array of related records indexed by relation names.

Source code

                    public function getRelatedRecords()
    {
        return $this->_related;
    }

getRelation() public method

Defined in: yii\db\BaseActiveRecord::getRelation()

Returns the relation object with the specified name.

A relation is defined by a getter method which returns an yii\db\ActiveQueryInterface object. It can be declared in either the Active Record class itself or one of its behaviors.

public yii\db\ActiveQueryInterface|yii\db\ActiveQuery|null getRelation ( $name, $throwException = true )
$name | string | The relation name, e.g. `orders` for a relation defined via `getOrders()` method (case-sensitive).
$throwException | boolean | Whether to throw exception if the relation does not exist.
return | yii\db\ActiveQueryInterface|yii\db\ActiveQuery|null | The relational query object. If the relation does not exist and `$throwException` is `false`, `null` will be returned.
throws | yii\base\InvalidArgumentException | if the named relation does not exist.

Source code

                    public function getRelation($name, $throwException = true)
    {
        $getter = 'get' . $name;
        try {
            // the relation could be defined in a behavior
            $relation = $this->$getter();
        } catch (UnknownMethodException $e) {
            if ($throwException) {
                throw new InvalidArgumentException(get_class($this) . ' has no relation named "' . $name . '".', 0, $e);
            }
            return null;
        }
        if (!$relation instanceof ActiveQueryInterface) {
            if ($throwException) {
                throw new InvalidArgumentException(get_class($this) . ' has no relation named "' . $name . '".');
            }
            return null;
        }
        if (method_exists($this, $getter)) {
            // relation name is case sensitive, trying to validate it when the relation is defined within this class
            $method = new \ReflectionMethod($this, $getter);
            $realName = lcfirst(substr($method->getName(), 3));
            if ($realName !== $name) {
                if ($throwException) {
                    throw new InvalidArgumentException('Relation names are case sensitive. ' . get_class($this) . " has a relation named \"$realName\" instead of \"$name\".");
                }
                return null;
            }
        }
        return $relation;
    }

getScenario() public method

Defined in: yii\base\Model::getScenario()

Returns the scenario that this model is used in.

Scenario affects how validation is performed and which attributes can be massively assigned.

public string getScenario ( )
return | string | The scenario that this model is in. Defaults to SCENARIO_DEFAULT.

Source code

                    public function getScenario()
    {
        return $this->_scenario;
    }

getValidators() public method

Defined in: yii\base\Model::getValidators()

Returns all the validators declared in rules().

This method differs from getActiveValidators() in that the latter only returns the validators applicable to the current $scenario.

Because this method returns an ArrayObject object, you may manipulate it by inserting or removing validators (useful in model behaviors). For example,

    $model->validators[] = $newValidator;

public ArrayObject|yii\validators\Validator[] getValidators ( )
return | ArrayObject|yii\validators\Validator[] | All the validators declared in the model.

Source code

                    public function getValidators()
    {
        if ($this->_validators === null) {
            $this->_validators = $this->createValidators();
        }
        return $this->_validators;
    }

hasAttribute() public method

Defined in: yii\db\BaseActiveRecord::hasAttribute()

Returns a value indicating whether the model has an attribute with the specified name.

public boolean hasAttribute ( $name )
$name | string | The name of the attribute
return | boolean | Whether the model has an attribute with the specified name.

Source code

                    public function hasAttribute($name)
    {
        return isset($this->_attributes[$name]) || in_array($name, $this->attributes(), true);
    }

hasErrors() public method

Defined in: yii\base\Model::hasErrors()

Returns a value indicating whether there is any validation error.

public boolean hasErrors ( $attribute = null )
$attribute | string|null | Attribute name. Use null to check all attributes.
return | boolean | Whether there is any error.

Source code

                    public function hasErrors($attribute = null)
    {
        return $attribute === null ? !empty($this->_errors) : isset($this->_errors[$attribute]);
    }

hasEventHandlers() public method

Defined in: yii\base\Component::hasEventHandlers()

Returns a value indicating whether there is any handler attached to the named event.

public boolean hasEventHandlers ( $name )
$name | string | The event name
return | boolean | Whether there is any handler attached to the event.

Source code

                    public function hasEventHandlers($name)
    {
        $this->ensureBehaviors();
        if (!empty($this->_events[$name])) {
            return true;
        }
        foreach ($this->_eventWildcards as $wildcard => $handlers) {
            if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
                return true;
            }
        }
        return Event::hasHandlers($this, $name);
    }

hasMany() public method

Defined in: yii\db\BaseActiveRecord::hasMany()

Declares a `has-many` relation.

The declaration is returned in terms of a relational yii\db\ActiveQuery instance through which the related record can be queried and retrieved back.

A `has-many` relation means that there are multiple related records matching the criteria set by this relation, e.g., a customer has many orders.

For example, to declare the `orders` relation for `Customer` class, we can write the following code in the `Customer` class:

    public function getOrders()
    {
        return $this->hasMany(Order::class, ['customer_id' => 'id']);
    }

Note that in the above, the 'customer_id' key in the `$link` parameter refers to an attribute name in the related class `Order`, while the 'id' value refers to an attribute name in the current AR class.

Call methods declared in yii\db\ActiveQuery to further customize the relation.

public yii\db\ActiveQueryInterface hasMany ( $class, $link )
$class | string | The class name of the related record
$link | array | The primary-foreign key constraint. The keys of the array refer to the attributes of the record associated with the `$class` model, while the values of the array refer to the corresponding attributes in this AR class.
return | yii\db\ActiveQueryInterface | The relational query object.

Source code

                    public function hasMany($class, $link)
    {
        return $this->createRelationQuery($class, $link, true);
    }

hasMethod() public method

Defined in: yii\base\Component::hasMethod()

Returns a value indicating whether a method is defined.

A method is defined if:

- the class has a method with the specified name
- an attached behavior has a method with the given name (when `$checkBehaviors` is true).

public boolean hasMethod ( $name, $checkBehaviors = true )
$name | string | The property name
$checkBehaviors | boolean | Whether to treat behaviors' methods as methods of this component
return | boolean | Whether the method is defined

Source code

                    public function hasMethod($name, $checkBehaviors = true)
    {
        if (method_exists($this, $name)) {
            return true;
        } elseif ($checkBehaviors) {
            $this->ensureBehaviors();
            foreach ($this->_behaviors as $behavior) {
                if ($behavior->hasMethod($name)) {
                    return true;
                }
            }
        }
        return false;
    }

hasOne() public method

Defined in: yii\db\BaseActiveRecord::hasOne()

Declares a `has-one` relation.

The declaration is returned in terms of a relational yii\db\ActiveQuery instance through which the related record can be queried and retrieved back.

A `has-one` relation means that there is at most one related record matching the criteria set by this relation, e.g., a customer has one country.

For example, to declare the `country` relation for `Customer` class, we can write the following code in the `Customer` class:

    public function getCountry()
    {
        return $this->hasOne(Country::class, ['id' => 'country_id']);
    }

Note that in the above, the 'id' key in the `$link` parameter refers to an attribute name in the related class `Country`, while the 'country_id' value refers to an attribute name in the current AR class.

Call methods declared in yii\db\ActiveQuery to further customize the relation.

public yii\db\ActiveQueryInterface hasOne ( $class, $link )
$class | string | The class name of the related record
$link | array | The primary-foreign key constraint. The keys of the array refer to the attributes of the record associated with the `$class` model, while the values of the array refer to the corresponding attributes in this AR class.
return | yii\db\ActiveQueryInterface | The relational query object.

Source code

                    public function hasOne($class, $link)
    {
        return $this->createRelationQuery($class, $link, false);
    }

hasProperty() public method

Defined in: yii\base\Component::hasProperty()

Returns a value indicating whether a property is defined for this component.

A property is defined if:

- the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
- the class has a member variable with the specified name (when `$checkVars` is true);
- an attached behavior has a property of the given name (when `$checkBehaviors` is true).

See also:

- canGetProperty()
- canSetProperty()

public boolean hasProperty ( $name, $checkVars = true, $checkBehaviors = true )
$name | string | The property name
$checkVars | boolean | Whether to treat member variables as properties
$checkBehaviors | boolean | Whether to treat behaviors' properties as properties of this component
return | boolean | Whether the property is defined

Source code

                    public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
    {
        return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
    }

init() public method

Defined in: yii\db\BaseActiveRecord::init()

Initializes the object.

This method is called at the end of the constructor. The default implementation will trigger an EVENT_INIT event.

public void init ( )

Source code

                    public function init()
    {
        parent::init();
        $this->trigger(self::EVENT_INIT);
    }

insert() public method

Inserts a row into the associated Mongo collection using the attribute values of this record.

This method performs the following steps in order:

1. call beforeValidate() when `$runValidation` is true. If validation fails, it will skip the rest of the steps;
2. call afterValidate() when `$runValidation` is true.
3. call beforeSave(). If the method returns false, it will skip the rest of the steps;
4. insert the record into collection. If this fails, it will skip the rest of the steps;
5. call afterSave();

In the above step 1, 2, 3 and 5, events EVENT_BEFORE_VALIDATE, EVENT_BEFORE_INSERT, EVENT_AFTER_INSERT and EVENT_AFTER_VALIDATE will be raised by the corresponding methods.

Only the changed attribute values will be inserted into database.

If the primary key is null during insertion, it will be populated with the actual value after insertion.

For example, to insert a customer record:

    $customer = new Customer();
    $customer->name = $name;
    $customer->email = $email;
    $customer->insert();

public boolean insert ( $runValidation = true, $attributes = null )
$runValidation | boolean | Whether to perform validation before saving the record. If the validation fails, the record will not be inserted into the collection.
$attributes | array | List of attributes that need to be saved. Defaults to null, meaning all attributes that are loaded will be saved.
return | boolean | Whether the attributes are valid and the record is inserted successfully.
throws | Exception | in case insert failed.

Source code

                    public function insert($runValidation = true, $attributes = null)
    {
        if ($runValidation && !$this->validate($attributes)) {
            return false;
        }
        if (!$this->isTransactional(self::OP_INSERT)) {
            return $this->insertInternal($attributes);
        }
        $result = null;
        static::getDb()->transaction(function() use ($attributes, &$result) {
            $result = $this->insertInternal($attributes);
        });
        return $result;
    }

insertInternal() protected method

See also yii\mongodb\ActiveRecord::insert().

protected void insertInternal ( $attributes = null )
$attributes |  |

Source code

                    protected function insertInternal($attributes = null)
    {
        if (!$this->beforeSave(true)) {
            return false;
        }
        $values = $this->getDirtyAttributes($attributes);
        if (empty($values)) {
            $currentAttributes = $this->getAttributes();
            foreach ($this->primaryKey() as $key) {
                if (isset($currentAttributes[$key])) {
                    $values[$key] = $currentAttributes[$key];
                }
            }
        }
        $newId = static::getCollection()->insert($values);
        if ($newId !== null) {
            $this->setAttribute('_id', $newId);
            $values['_id'] = $newId;
        }
        $changedAttributes = array_fill_keys(array_keys($values), null);
        $this->setOldAttributes($values);
        $this->afterSave(true, $changedAttributes);
        return true;
    }

instance() public static method

Defined in: yii\base\StaticInstanceTrait::instance()

Returns static class instance, which can be used to obtain meta information.

public static static instance ( $refresh = false )
$refresh | boolean | Whether to re-create static instance even, if it is already cached.
return | static | Class instance.

Source code

                    public static function instance($refresh = false)
    {
        $className = get_called_class();
        if ($refresh || !isset(self::$_instances[$className])) {
            self::$_instances[$className] = Yii::createObject($className);
        }
        return self::$_instances[$className];
    }

instantiate() public static method

Defined in: yii\db\BaseActiveRecord::instantiate()

Creates an active record instance.

This method is called together with populateRecord() by yii\db\ActiveQuery. It is not meant to be used for creating new records directly.

You may override this method if the instance being created depends on the row data to be populated into the record. For example, by creating a record based on the value of a column, you may implement the so-called single-table inheritance mapping.

public static static instantiate ( $row )
$row | array | Row data to be populated into the record.
return | static | The newly created active record

Source code

                    public static function instantiate($row)
    {
        return new static();
    }

isAttributeActive() public method

Defined in: yii\base\Model::isAttributeActive()

Returns a value indicating whether the attribute is active in the current scenario.

See also activeAttributes().

public boolean isAttributeActive ( $attribute )
$attribute | string | Attribute name
return | boolean | Whether the attribute is active in the current scenario

Source code

                    public function isAttributeActive($attribute)
    {
        return in_array($attribute, $this->activeAttributes(), true);
    }

isAttributeChanged() public method

Defined in: yii\db\BaseActiveRecord::isAttributeChanged()

Returns a value indicating whether the named attribute has been changed.

public boolean isAttributeChanged ( $name, $identical = true )
$name | string | The name of the attribute.
$identical | boolean | Whether the comparison of new and old value is made for identical values using `===`, defaults to `true`. Otherwise `==` is used for comparison. This parameter is available since version 2.0.4.
return | boolean | Whether the attribute has been changed

Source code

                    public function isAttributeChanged($name, $identical = true)
    {
        if (isset($this->_attributes[$name], $this->_oldAttributes[$name])) {
            if ($identical) {
                return $this->_attributes[$name] !== $this->_oldAttributes[$name];
            }
            return $this->_attributes[$name] != $this->_oldAttributes[$name];
        }
        return isset($this->_attributes[$name]) || isset($this->_oldAttributes[$name]);
    }

isAttributeRequired() public method

Defined in: yii\base\Model::isAttributeRequired()

Returns a value indicating whether the attribute is required.

This is determined by checking if the attribute is associated with a required validation rule in the current $scenario.

Note that when the validator has a conditional validation applied using $when this method will return `false` regardless of the `when` condition because it may be called be before the model is loaded with data.

public boolean isAttributeRequired ( $attribute )
$attribute | string | Attribute name
return | boolean | Whether the attribute is required

Source code

                    public function isAttributeRequired($attribute)
    {
        foreach ($this->getActiveValidators($attribute) as $validator) {
            if ($validator instanceof RequiredValidator && $validator->when === null) {
                return true;
            }
        }
        return false;
    }

isAttributeSafe() public method

Defined in: yii\base\Model::isAttributeSafe()

Returns a value indicating whether the attribute is safe for massive assignments.

See also safeAttributes().

public boolean isAttributeSafe ( $attribute )
$attribute | string | Attribute name
return | boolean | Whether the attribute is safe for massive assignments

Source code

                    public function isAttributeSafe($attribute)
    {
        return in_array($attribute, $this->safeAttributes(), true);
    }

isPrimaryKey() public static method

Defined in: yii\db\BaseActiveRecord::isPrimaryKey()

Returns a value indicating whether the given set of attributes represents the primary key for this model.

public static boolean isPrimaryKey ( $keys )
$keys | array | The set of attributes to check
return | boolean | Whether the given set of attributes represents the primary key for this model

Source code

                    public static function isPrimaryKey($keys)
    {
        $pks = static::primaryKey();
        if (count($keys) === count($pks)) {
            return count(array_intersect($keys, $pks)) === count($pks);
        }
        return false;
    }

isRelationPopulated() public method

Defined in: yii\db\BaseActiveRecord::isRelationPopulated()

Check whether the named relation has been populated with records.

See also getRelation().

public boolean isRelationPopulated ( $name )
$name | string | The relation name, e.g. `orders` for a relation defined via `getOrders()` method (case-sensitive).
return | boolean | Whether relation has been populated with records.

Source code

                    public function isRelationPopulated($name)
    {
        return array_key_exists($name, $this->_related);
    }

isTransactional() public method

Returns a value indicating whether the specified operation is transactional in the current $scenario.

public boolean isTransactional ( $operation )
$operation | integer | The operation to check. Possible values are OP_INSERT, OP_UPDATE and OP_DELETE.
return | boolean | Whether the specified operation is transactional in the current $scenario.

Source code

                    public function isTransactional($operation)
    {
        $scenario = $this->getScenario();
        $transactions = $this->transactions();
        return isset($transactions[$scenario]) && ($transactions[$scenario] & $operation);
    }

link() public method

Defined in: yii\db\BaseActiveRecord::link()

Establishes the relationship between two models.

The relationship is established by setting the foreign key value(s) in one model to be the corresponding primary key value(s) in the other model. The model with the foreign key will be saved into database without performing validation and without events/behaviors.

If the relationship involves a junction table, a new row will be inserted into the junction table which contains the primary key values from both models.

Note that this method requires that the primary key value is not null.

public void link ( $name, $model, $extraColumns = [] )
$name | string | The case sensitive name of the relationship, e.g. `orders` for a relation defined via `getOrders()` method.
$model | yii\db\ActiveRecordInterface | The model to be linked with the current one.
$extraColumns | array | Additional column values to be saved into the junction table. This parameter is only meaningful for a relationship involving a junction table (i.e., a relation set with yii\db\ActiveRelationTrait::via() or yii\db\ActiveQuery::viaTable().)
throws | yii\base\InvalidCallException | if the method is unable to link two models.

Source code

                    public function link($name, $model, $extraColumns = [])
    {
        /* @var $relation ActiveQueryInterface|ActiveQuery */
        $relation = $this->getRelation($name);
        if ($relation->via !== null) {
            if ($this->getIsNewRecord() || $model->getIsNewRecord()) {
                throw new InvalidCallException('Unable to link models: the models being linked cannot be newly created.');
            }
            if (is_array($relation->via)) {
                /* @var $viaRelation ActiveQuery */
                list($viaName, $viaRelation) = $relation->via;
                $viaClass = $viaRelation->modelClass;
                // unset $viaName so that it can be reloaded to reflect the change
                unset($this->_related[$viaName]);
            } else {
                $viaRelation = $relation->via;
                $viaTable = reset($relation->via->from);
            }
            $columns = [];
            foreach ($viaRelation->link as $a => $b) {
                $columns[$a] = $this->$b;
            }
            foreach ($relation->link as $a => $b) {
                $columns[$b] = $model->$a;
            }
            foreach ($extraColumns as $k => $v) {
                $columns[$k] = $v;
            }
            if (is_array($relation->via)) {
                /* @var $viaClass ActiveRecordInterface */
                /* @var $record ActiveRecordInterface */
                $record = Yii::createObject($viaClass);
                foreach ($columns as $column => $value) {
                    $record->$column = $value;
                }
                $record->insert(false);
            } else {
                /* @var $viaTable string */
                static::getDb()->createCommand()->insert($viaTable, $columns)->execute();
            }
        } else {
            $p1 = $model->isPrimaryKey(array_keys($relation->link));
            $p2 = static::isPrimaryKey(array_values($relation->link));
            if ($p1 && $p2) {
                if ($this->getIsNewRecord()) {
                    if ($model->getIsNewRecord()) {
                        throw new InvalidCallException('Unable to link models: at most one model can be newly created.');
                    }
                    $this->bindModels(array_flip($relation->link), $this, $model);
                } else {
                    $this->bindModels($relation->link, $model, $this);
                }
            } elseif ($p1) {
                $this->bindModels(array_flip($relation->link), $this, $model);
            } elseif ($p2) {
                $this->bindModels($relation->link, $model, $this);
            } else {
                throw new InvalidCallException('Unable to link models: the link defining the relation does not involve any primary key.');
            }
        }
        // update lazily loaded related objects
        if (!$relation->multiple) {
            $this->_related[$name] = $model;
        } elseif (isset($this->_related[$name])) {
            if ($relation->indexBy !== null) {
                if ($relation->indexBy instanceof \Closure) {
                    $index = call_user_func($relation->indexBy, $model);
                } else {
                    $index = $model->{$relation->indexBy};
                }
                $this->_related[$name][$index] = $model;
            } else {
                $this->_related[$name][] = $model;
            }
        }
    }

load() public method

Defined in: yii\base\Model::load()

Populates the model with input data.

This method provides a convenient shortcut for:

    if (isset($_POST['FormName'])) {
        $model->attributes = $_POST['FormName'];
        if ($model->save()) {
            // handle success
        }
    }

which, with `load()` can be written as:

    if ($model->load($_POST) && $model->save()) {
        // handle success
    }

`load()` gets the `'FormName'` from the model's formName() method (which you may override), unless the `$formName` parameter is given. If the form name is empty, `load()` populates the model with the whole of `$data`, instead of `$data['FormName']`.

Note, that the data being populated is subject to the safety check by setAttributes().

public boolean load ( $data, $formName = null )
$data | array | The data array to load, typically `$_POST` or `$_GET`.
$formName | string|null | The form name to use to load the data into the model, empty string when form not use. If not set, formName() is used.
return | boolean | Whether `load()` found the expected form in `$data`.

Source code

                    public function load($data, $formName = null)
    {
        $scope = $formName === null ? $this->formName() : $formName;
        if ($scope === '' && !empty($data)) {
            $this->setAttributes($data);
            return true;
        } elseif (isset($data[$scope])) {
            $this->setAttributes($data[$scope]);
            return true;
        }
        return false;
    }

loadMultiple() public static method

Defined in: yii\base\Model::loadMultiple()

Populates a set of models with the data from end user.

This method is mainly used to collect tabular data input. The data to be loaded for each model is `$data[formName][index]`, where `formName` refers to the value of formName(), and `index` the index of the model in the `$models` array. If formName() is empty, `$data[index]` will be used to populate each model. The data being populated to each model is subject to the safety check by setAttributes().

public static boolean loadMultiple ( $models, $data, $formName = null )
$models | array | The models to be populated. Note that all models should have the same class.
$data | array | The data array. This is usually `$_POST` or `$_GET`, but can also be any valid array supplied by end user.
$formName | string|null | The form name to be used for loading the data into the models. If not set, it will use the formName() value of the first model in `$models`. This parameter is available since version 2.0.1.
return | boolean | Whether at least one of the models is successfully populated.

Source code

                    public static function loadMultiple($models, $data, $formName = null)
    {
        if ($formName === null) {
            /* @var $first Model|false */
            $first = reset($models);
            if ($first === false) {
                return false;
            }
            $formName = $first->formName();
        }
        $success = false;
        foreach ($models as $i => $model) {
            /* @var $model Model */
            if ($formName == '') {
                if (!empty($data[$i]) && $model->load($data[$i], '')) {
                    $success = true;
                }
            } elseif (!empty($data[$formName][$i]) && $model->load($data[$formName][$i], '')) {
                $success = true;
            }
        }
        return $success;
    }

loadRelations() public method (available since version 2.0.50)

Defined in: yii\db\BaseActiveRecord::loadRelations()

Eager loads related models for the already loaded primary model.

Helps to reduce the number of queries performed against database if some related models are only used when a specific condition is met. For example:

    $customer = Customer::find()->where(['id' => 123])->one();
    if (Yii:app()->getUser()->getIdentity()->canAccessOrders()) {
        $customer->loadRelations('orders.items');
    }

public void loadRelations ( $relationNames, $asArray = false )
$relationNames | string|array | The names of the relations of this model to be loaded from database. See yii\db\ActiveQueryInterface::with() on how to specify this argument.
$asArray | boolean | Whether to load each relation as an array or an object (if the relation itself does not specify that).

Source code

                    public function loadRelations($relationNames, $asArray = false)
    {
        $models = [$this];
        static::loadRelationsFor($models, $relationNames, $asArray);
    }

loadRelationsFor() public static method (available since version 2.0.50)

Defined in: yii\db\BaseActiveRecord::loadRelationsFor()

Eager loads related models for the already loaded primary models.

Helps to reduce the number of queries performed against database if some related models are only used when a specific condition is met. For example:

    $customers = Customer::find()->where(['country_id' => 123])->all();
    if (Yii:app()->getUser()->getIdentity()->canAccessOrders()) {
        Customer::loadRelationsFor($customers, 'orders.items');
    }

public static void loadRelationsFor ( &$models, $relationNames, $asArray = false )

$models

array|yii\db\ActiveRecordInterface[]

Array of primary models. Each model should have the same type and can be:

- an active record instance;
- active record instance represented by array (i.e. active record was loaded using yii\db\ActiveQuery::asArray()).

$relationNames | string|array | The names of the relations of primary models to be loaded from database. See yii\db\ActiveQueryInterface::with() on how to specify this argument.
$asArray | boolean | Whether to load each related model as an array or an object (if the relation itself does not specify that).

Source code

                    public static function loadRelationsFor(&$models, $relationNames, $asArray = false)
    {
        // ActiveQueryTrait::findWith() called below assumes $models array is non-empty.
        if (empty($models)) {
            return;
        }
        static::find()->asArray($asArray)->findWith((array)$relationNames, $models);
    }

markAttributeDirty() public method

Defined in: yii\db\BaseActiveRecord::markAttributeDirty()

Marks an attribute dirty.

This method may be called to force updating a record when calling update(), even if there is no change being made to the record.

public void markAttributeDirty ( $name )
$name | string | The attribute name

Source code

                    public function markAttributeDirty($name)
    {
        unset($this->_oldAttributes[$name]);
    }

off() public method

Defined in: yii\base\Component::off()

Detaches an existing event handler from this component.

This method is the opposite of on().

Note: in case wildcard pattern is passed for event name, only the handlers registered with this wildcard will be removed, while handlers registered with plain names matching this wildcard will remain.

See also on().

public boolean off ( $name, $handler = null )
$name | string | Event name
$handler | callable|null | The event handler to be removed. If it is null, all handlers attached to the named event will be removed.
return | boolean | If a handler is found and detached

Source code

                    public function off($name, $handler = null)
    {
        $this->ensureBehaviors();
        if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
            return false;
        }
        if ($handler === null) {
            unset($this->_events[$name], $this->_eventWildcards[$name]);
            return true;
        }
        $removed = false;
        // plain event names
        if (isset($this->_events[$name])) {
            foreach ($this->_events[$name] as $i => $event) {
                if ($event[0] === $handler) {
                    unset($this->_events[$name][$i]);
                    $removed = true;
                }
            }
            if ($removed) {
                $this->_events[$name] = array_values($this->_events[$name]);
                return true;
            }
        }
        // wildcard event names
        if (isset($this->_eventWildcards[$name])) {
            foreach ($this->_eventWildcards[$name] as $i => $event) {
                if ($event[0] === $handler) {
                    unset($this->_eventWildcards[$name][$i]);
                    $removed = true;
                }
            }
            if ($removed) {
                $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
                // remove empty wildcards to save future redundant regex checks:
                if (empty($this->_eventWildcards[$name])) {
                    unset($this->_eventWildcards[$name]);
                }
            }
        }
        return $removed;
    }

offsetExists() public method

Defined in: yii\db\BaseActiveRecord::offsetExists()

Returns whether there is an element at the specified offset.

This method is required by the interface ArrayAccess.

public boolean offsetExists ( $offset )
$offset | mixed | The offset to check on
return | boolean | Whether there is an element at the specified offset.

Source code

                    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return $this->__isset($offset);
    }

offsetGet() public method

Defined in: yii\base\Model::offsetGet()

Returns the element at the specified offset.

This method is required by the SPL interface ArrayAccess. It is implicitly called when you use something like `$value = $model[$offset];`.

public mixed offsetGet ( $offset )
$offset | string | The offset to retrieve element.
return | mixed | The element at the offset, null if no element is found at the offset

Source code

                    #[\ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return $this->$offset;
    }

offsetSet() public method

Defined in: yii\base\Model::offsetSet()

Sets the element at the specified offset.

This method is required by the SPL interface ArrayAccess. It is implicitly called when you use something like `$model[$offset] = $value;`.

public void offsetSet ( $offset, $value )
$offset | string | The offset to set element
$value | mixed | The element value

Source code

                    #[\ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        $this->$offset = $value;
    }

offsetUnset() public method

Defined in: yii\db\BaseActiveRecord::offsetUnset()

Sets the element value at the specified offset to null.

This method is required by the SPL interface ArrayAccess. It is implicitly called when you use something like `unset($model[$offset])`.

public void offsetUnset ( $offset )
$offset | mixed | The offset to unset element

Source code

                    public function offsetUnset($offset)
    {
        if (property_exists($this, $offset)) {
            $this->$offset = null;
        } else {
            unset($this->$offset);
        }
    }

on() public method

Defined in: yii\base\Component::on()

Attaches an event handler to an event.

The event handler must be a valid PHP callback. The following are some examples:

    function ($event) { ... }         // anonymous function
    [$object, 'handleClick']          // $object->handleClick()
    ['Page', 'handleClick']           // Page::handleClick()
    'handleClick'                     // global function handleClick()

The event handler must be defined with the following signature,

    function ($event)

where `$event` is an yii\base\Event object which includes parameters associated with the event.

Since 2.0.14 you can specify event name as a wildcard pattern:

    $component->on('event.group.*', function ($event) {
        Yii::trace($event->name . ' is triggered.');
    });

See also off().

public void on ( $name, $handler, $data = null, $append = true )
$name | string | The event name
$handler | callable | The event handler
$data | mixed | The data to be passed to the event handler when the event is triggered. When the event handler is invoked, this data can be accessed via yii\base\Event::$data.
$append | boolean | Whether to append new event handler to the end of the existing handler list. If false, the new handler will be inserted at the beginning of the existing handler list.

Source code

                    public function on($name, $handler, $data = null, $append = true)
    {
        $this->ensureBehaviors();
        if (strpos($name, '*') !== false) {
            if ($append || empty($this->_eventWildcards[$name])) {
                $this->_eventWildcards[$name][] = [$handler, $data];
            } else {
                array_unshift($this->_eventWildcards[$name], [$handler, $data]);
            }
            return;
        }
        if ($append || empty($this->_events[$name])) {
            $this->_events[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_events[$name], [$handler, $data]);
        }
    }

onUnsafeAttribute() public method

Defined in: yii\base\Model::onUnsafeAttribute()

This method is invoked when an unsafe attribute is being massively assigned.

The default implementation will log a warning message if YII_DEBUG is on. It does nothing otherwise.

public void onUnsafeAttribute ( $name, $value )
$name | string | The unsafe attribute name
$value | mixed | The attribute value

Source code

                    public function onUnsafeAttribute($name, $value)
    {
        if (YII_DEBUG) {
            Yii::debug("Failed to set unsafe attribute '$name' in '" . get_class($this) . "'.", __METHOD__);
        }
    }

optimisticLock() public method

Defined in: yii\db\BaseActiveRecord::optimisticLock()

Returns the name of the column that stores the lock version for implementing optimistic locking.

Optimistic locking allows multiple users to access the same record for edits and avoids potential conflicts. In case when a user attempts to save the record upon some staled data (because another user has modified the data), a yii\db\StaleObjectException exception will be thrown, and the update or deletion is skipped.

Optimistic locking is only supported by update() and delete().

To use Optimistic locking:

1. Create a column to store the version number of each row. The column type should be `BIGINT DEFAULT 0`. Override this method to return the name of this column.
2. Ensure the version value is submitted and loaded to your model before any update or delete. Or add OptimisticLockBehavior to your model class in order to automate the process.
3. In the Web form that collects the user input, add a hidden field that stores the lock version of the record being updated.
4. In the controller action that does the data updating, try to catch the yii\db\StaleObjectException and implement necessary business logic (e.g. merging the changes, prompting stated data) to resolve the conflict.

public string|null optimisticLock ( )
return | string|null | The column name that stores the lock version of a table row. If `null` is returned (default implemented), optimistic locking will not be supported.

Source code

                    public function optimisticLock()
    {
        return null;
    }

populateRecord() public static method

Defined in: yii\db\BaseActiveRecord::populateRecord()

Populates an active record object using a row of data from the database/storage.

This is an internal method meant to be called to create active record objects after fetching data from the database. It is mainly used by yii\db\ActiveQuery to populate the query results into active records.

When calling this method manually you should call afterFind() on the created record to trigger the afterFind Event.

public static void populateRecord ( $record, $row )
$record | yii\db\BaseActiveRecord | The record to be populated. In most cases this will be an instance created by instantiate() beforehand.
$row | array | Attribute values (name => value)

Source code

                    public static function populateRecord($record, $row)
    {
        $columns = array_flip($record->attributes());
        foreach ($row as $name => $value) {
            if (isset($columns[$name])) {
                $record->_attributes[$name] = $value;
            } elseif ($record->canSetProperty($name)) {
                $record->$name = $value;
            }
        }
        $record->_oldAttributes = $record->_attributes;
        $record->_related = [];
        $record->_relationsDependencies = [];
    }

populateRelation() public method

Defined in: yii\db\BaseActiveRecord::populateRelation()

Populates the named relation with the related records.

Note that this method does not check if the relation exists or not.

See also getRelation().

public void populateRelation ( $name, $records )
$name | string | The relation name, e.g. `orders` for a relation defined via `getOrders()` method (case-sensitive).
$records | yii\db\ActiveRecordInterface|array|null | The related records to be populated into the relation.

Source code

                    public function populateRelation($name, $records)
    {
        foreach ($this->_relationsDependencies as &$relationNames) {
            unset($relationNames[$name]);
        }
        $this->_related[$name] = $records;
    }

primaryKey() public static method

Returns the primary key name(s) for this AR class.

The default implementation will return ['_id'].

Note that an array should be returned even for a collection with single primary key.

public static string[] primaryKey ( )
return | string[] | The primary keys of the associated Mongo collection.

Source code

                    public static function primaryKey()
    {
        return ['_id'];
    }

refresh() public method

Defined in: yii\db\BaseActiveRecord::refresh()

Repopulates this active record with the latest data.

If the refresh is successful, an EVENT_AFTER_REFRESH event will be triggered. This event is available since version 2.0.8.

public boolean refresh ( )
return | boolean | Whether the row still exists in the database. If `true`, the latest data will be populated to this active record. Otherwise, this record will remain unchanged.

Source code

                    public function refresh()
    {
        /* @var $record BaseActiveRecord */
        $record = static::findOne($this->getPrimaryKey(true));
        return $this->refreshInternal($record);
    }

refreshInternal() protected method (available since version 2.0.13)

Defined in: yii\db\BaseActiveRecord::refreshInternal()

Repopulates this active record with the latest data from a newly fetched instance.

See also refresh().

protected boolean refreshInternal ( $record )
$record | yii\db\BaseActiveRecord | The record to take attributes from.
return | boolean | Whether refresh was successful.

Source code

                    protected function refreshInternal($record)
    {
        if ($record === null) {
            return false;
        }
        foreach ($this->attributes() as $name) {
            $this->_attributes[$name] = isset($record->_attributes[$name]) ? $record->_attributes[$name] : null;
        }
        $this->_oldAttributes = $record->_oldAttributes;
        $this->_related = [];
        $this->_relationsDependencies = [];
        $this->afterRefresh();
        return true;
    }

resolveFields() protected method

Defined in: yii\base\ArrayableTrait::resolveFields()

Determines which fields can be returned by toArray().

This method will first extract the root fields from the given fields. Then it will check the requested root fields against those declared in fields() and extraFields() to determine which fields can be returned.

protected array resolveFields ( array $fields, array $expand )
$fields | array | The fields being requested for exporting
$expand | array | The additional fields being requested for exporting
return | array | The list of fields to be exported. The array keys are the field names, and the array values are the corresponding object property names or PHP callables returning the field values.

Source code

                    protected function resolveFields(array $fields, array $expand)
    {
        $fields = $this->extractRootFields($fields);
        $expand = $this->extractRootFields($expand);
        $result = [];
        foreach ($this->fields() as $field => $definition) {
            if (is_int($field)) {
                $field = $definition;
            }
            if (empty($fields) || in_array($field, $fields, true)) {
                $result[$field] = $definition;
            }
        }
        if (empty($expand)) {
            return $result;
        }
        foreach ($this->extraFields() as $field => $definition) {
            if (is_int($field)) {
                $field = $definition;
            }
            if (in_array($field, $expand, true)) {
                $result[$field] = $definition;
            }
        }
        return $result;
    }

rules() public method

Defined in: yii\base\Model::rules()

Returns the validation rules for attributes.

Validation rules are used by validate() to check if attribute values are valid. Child classes may override this method to declare different validation rules.

Each rule is an array with the following structure:

    [
        ['attribute1', 'attribute2'],
        'validator type',
        'on' => ['scenario1', 'scenario2'],
        //...other parameters...
    ]

where

- attribute list: required, specifies the attributes array to be validated, for single attribute you can pass a string;
- validator type: required, specifies the validator to be used. It can be a built-in validator name, a method name of the model class, an anonymous function, or a validator class name.
- on: optional, specifies the scenarios array in which the validation rule can be applied. If this option is not set, the rule will apply to all scenarios.
- additional name-value pairs can be specified to initialize the corresponding validator properties. Please refer to individual validator class API for possible properties.

A validator can be either an object of a class extending yii\validators\Validator, or a model class method (called inline validator) that has the following signature:

    // $params refers to validation parameters given in the rule
    function validatorName($attribute, $params)

In the above `$attribute` refers to the attribute currently being validated while `$params` contains an array of validator configuration options such as `max` in case of `string` validator. The value of the attribute currently being validated can be accessed as `$this->$attribute`. Note the `$` before `attribute`; this is taking the value of the variable `$attribute` and using it as the name of the property to access.

Yii also provides a set of built-in validators. Each one has an alias name which can be used when specifying a validation rule.

Below are some examples:

    [
        // built-in "required" validator
        [['username', 'password'], 'required'],
        // built-in "string" validator customized with "min" and "max" properties
        ['username', 'string', 'min' => 3, 'max' => 12],
        // built-in "compare" validator that is used in "register" scenario only
        ['password', 'compare', 'compareAttribute' => 'password2', 'on' => 'register'],
        // an inline validator defined via the "authenticate()" method in the model class
        ['password', 'authenticate', 'on' => 'login'],
        // a validator of class "DateRangeValidator"
        ['dateRange', 'DateRangeValidator'],
    ];

Note, in order to inherit rules defined in the parent class, a child class needs to merge the parent rules with child rules using functions such as `array_merge()`.

See also scenarios().

public array rules ( )
return | array | Validation rules

Source code

                    public function rules()
    {
        return [];
    }

safeAttributes() public method

Defined in: yii\base\Model::safeAttributes()

Returns the attribute names that are safe to be massively assigned in the current scenario.

public string[] safeAttributes ( )
return | string[] | Safe attribute names

Source code

                    public function safeAttributes()
    {
        $scenario = $this->getScenario();
        $scenarios = $this->scenarios();
        if (!isset($scenarios[$scenario])) {
            return [];
        }
        $attributes = [];
        foreach ($scenarios[$scenario] as $attribute) {
            if (
                $attribute !== ''
                && strncmp($attribute, '!', 1) !== 0
                && !in_array('!' . $attribute, $scenarios[$scenario])
            ) {
                $attributes[] = $attribute;
            }
        }
        return $attributes;
    }

save() public method

Defined in: yii\db\BaseActiveRecord::save()

Saves the current record.

This method will call insert() when $isNewRecord is `true`, or update() when $isNewRecord is `false`.

For example, to save a customer record:

    $customer = new Customer; // or $customer = Customer::findOne($id);
    $customer->name = $name;
    $customer->email = $email;
    $customer->save();

public boolean save ( $runValidation = true, $attributeNames = null )
$runValidation | boolean | Whether to perform validation (calling validate()) before saving the record. Defaults to `true`. If the validation fails, the record will not be saved to the database and this method will return `false`.
$attributeNames | array|null | List of attribute names that need to be saved. Defaults to null, meaning all attributes that are loaded from DB will be saved.
return | boolean | Whether the saving succeeded (i.e. no validation errors occurred).

Source code

                    public function save($runValidation = true, $attributeNames = null)
    {
        if ($this->getIsNewRecord()) {
            return $this->insert($runValidation, $attributeNames);
        }
        return $this->update($runValidation, $attributeNames) !== false;
    }

scenarios() public method

Defined in: yii\base\Model::scenarios()

Returns a list of scenarios and the corresponding active attributes.

An active attribute is one that is subject to validation in the current scenario. The returned array should be in the following format:

    [
        'scenario1' => ['attribute11', 'attribute12', ...],
        'scenario2' => ['attribute21', 'attribute22', ...],
        ...
    ]

By default, an active attribute is considered safe and can be massively assigned. If an attribute should NOT be massively assigned (thus considered unsafe), please prefix the attribute with an exclamation character (e.g. `'!rank'`).

The default implementation of this method will return all scenarios found in the rules() declaration. A special scenario named SCENARIO_DEFAULT will contain all attributes found in the rules(). Each scenario will be associated with the attributes that are being validated by the validation rules that apply to the scenario.

public array scenarios ( )
return | array | A list of scenarios and the corresponding active attributes.

Source code

                    public function scenarios()
    {
        $scenarios = [self::SCENARIO_DEFAULT => []];
        foreach ($this->getValidators() as $validator) {
            foreach ($validator->on as $scenario) {
                $scenarios[$scenario] = [];
            }
            foreach ($validator->except as $scenario) {
                $scenarios[$scenario] = [];
            }
        }
        $names = array_keys($scenarios);
        foreach ($this->getValidators() as $validator) {
            if (empty($validator->on) && empty($validator->except)) {
                foreach ($names as $name) {
                    foreach ($validator->attributes as $attribute) {
                        $scenarios[$name][$attribute] = true;
                    }
                }
            } elseif (empty($validator->on)) {
                foreach ($names as $name) {
                    if (!in_array($name, $validator->except, true)) {
                        foreach ($validator->attributes as $attribute) {
                            $scenarios[$name][$attribute] = true;
                        }
                    }
                }
            } else {
                foreach ($validator->on as $name) {
                    foreach ($validator->attributes as $attribute) {
                        $scenarios[$name][$attribute] = true;
                    }
                }
            }
        }
        foreach ($scenarios as $scenario => $attributes) {
            if (!empty($attributes)) {
                $scenarios[$scenario] = array_keys($attributes);
            }
        }
        return $scenarios;
    }

setAttribute() public method

Defined in: yii\db\BaseActiveRecord::setAttribute()

Sets the named attribute value.

See also hasAttribute().

public void setAttribute ( $name, $value )
$name | string | The attribute name
$value | mixed | The attribute value.
throws | yii\base\InvalidArgumentException | if the named attribute does not exist.

Source code

                    public function setAttribute($name, $value)
    {
        if ($this->hasAttribute($name)) {
            if (
                !empty($this->_relationsDependencies[$name])
                && (!array_key_exists($name, $this->_attributes) || $this->_attributes[$name] !== $value)
            ) {
                $this->resetDependentRelations($name);
            }
            $this->_attributes[$name] = $value;
        } else {
            throw new InvalidArgumentException(get_class($this) . ' has no attribute named "' . $name . '".');
        }
    }

setAttributes() public method

Defined in: yii\base\Model::setAttributes()

Sets the attribute values in a massive way.

See also:

- safeAttributes()
- attributes()

public void setAttributes ( $values, $safeOnly = true )
$values | array | Attribute values (name => value) to be assigned to the model.
$safeOnly | boolean | Whether the assignments should only be done to the safe attributes. A safe attribute is one that is associated with a validation rule in the current $scenario.

Source code

                    public function setAttributes($values, $safeOnly = true)
    {
        if (is_array($values)) {
            $attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes());
            foreach ($values as $name => $value) {
                if (isset($attributes[$name])) {
                    $this->$name = $value;
                } elseif ($safeOnly) {
                    $this->onUnsafeAttribute($name, $value);
                }
            }
        }
    }

setIsNewRecord() public method

Defined in: yii\db\BaseActiveRecord::setIsNewRecord()

Sets the value indicating whether the record is new.

See also getIsNewRecord().

public void setIsNewRecord ( $value )
$value | boolean | Whether the record is new and should be inserted when calling save().

Source code

                    public function setIsNewRecord($value)
    {
        $this->_oldAttributes = $value ? null : $this->_attributes;
    }

setOldAttribute() public method

Defined in: yii\db\BaseActiveRecord::setOldAttribute()

Sets the old value of the named attribute.

See also hasAttribute().

public void setOldAttribute ( $name, $value )
$name | string | The attribute name
$value | mixed | The old attribute value.
throws | yii\base\InvalidArgumentException | if the named attribute does not exist.

Source code

                    public function setOldAttribute($name, $value)
    {
        if ($this->canSetOldAttribute($name)) {
            $this->_oldAttributes[$name] = $value;
        } else {
            throw new InvalidArgumentException(get_class($this) . ' has no attribute named "' . $name . '".');
        }
    }

setOldAttributes() public method

Defined in: yii\db\BaseActiveRecord::setOldAttributes()

Sets the old attribute values.

All existing old attribute values will be discarded.

public void setOldAttributes ( $values )
$values | array|null | Old attribute values to be set. If set to `null` this record is considered to be new.

Source code

                    public function setOldAttributes($values)
    {
        $this->_oldAttributes = $values;
    }

setScenario() public method

Defined in: yii\base\Model::setScenario()

Sets the scenario for the model.

Note that this method does not check if the scenario exists or not. The method validate() will perform this check.

public void setScenario ( $value )
$value | string | The scenario that this model is in.

Source code

                    public function setScenario($value)
    {
        $this->_scenario = $value;
    }

toArray() public method

Converts the model into an array.

This method will first identify which fields to be included in the resulting array by calling resolveFields(). It will then turn the model into an array with these fields. If `$recursive` is true, any embedded objects will also be converted into arrays. When embedded objects are yii\base\Arrayable, their respective nested fields will be extracted and passed to toArray().

If the model implements the yii\web\Linkable interface, the resulting array will also have a `_link` element which refers to a list of links as specified by the interface.

public array toArray ( array $fields = [], array $expand = [], $recursive = true )
$fields | array | The fields being requested. If empty or if it contains '*', all fields as specified by fields() will be returned. Fields can be nested, separated with dots (.). e.g.: item.field.sub-field `$recursive` must be true for nested fields to be extracted. If `$recursive` is false, only the root fields will be extracted.
$expand | array | The additional fields being requested for exporting. Only fields declared in extraFields() will be considered. Expand can also be nested, separated with dots (.). e.g.: item.expand1.expand2 `$recursive` must be true for nested expands to be extracted. If `$recursive` is false, only the root expands will be extracted.
$recursive | boolean | Whether to recursively return array representation of embedded objects.
return | array | The array representation of the object

Source code

                    public function toArray(array $fields = [], array $expand = [], $recursive = true)
    {
        $data = parent::toArray($fields, $expand, false);
        if (!$recursive) {
            return $data;
        }
        return $this->toArrayInternal($data);
    }

transactions() public method

Declares which DB operations should be performed within a transaction in different scenarios.

The supported DB operations are: OP_INSERT, OP_UPDATE and OP_DELETE, which correspond to the insert(), update() and delete() methods, respectively. By default, these methods are NOT enclosed in a DB transaction.

In some scenarios, to ensure data consistency, you may want to enclose some or all of them in transactions. You can do so by overriding this method and returning the operations that need to be transactional. For example,

    return [
        'admin' => self::OP_INSERT,
        'api' => self::OP_INSERT | self::OP_UPDATE | self::OP_DELETE,
        // the above is equivalent to the following:
        // 'api' => self::OP_ALL,

    ];

The above declaration specifies that in the "admin" scenario, the insert operation (insert()) should be done in a transaction; and in the "api" scenario, all the operations should be done in a transaction.

public array transactions ( )
return | array | The declarations of transactional operations. The array keys are scenarios names, and the array values are the corresponding transaction operations.

Source code

                    public function transactions()
    {
        return [];
    }

trigger() public method

Defined in: yii\base\Component::trigger()

Triggers an event.

This method represents the happening of an event. It invokes all attached handlers for the event including class-level handlers.

public void trigger ( $name, yii\base\Event $event = null )
$name | string | The event name
$event | yii\base\Event|null | The event instance. If not set, a default yii\base\Event object will be created.

Source code

                    public function trigger($name, Event $event = null)
    {
        $this->ensureBehaviors();
        $eventHandlers = [];
        foreach ($this->_eventWildcards as $wildcard => $handlers) {
            if (StringHelper::matchWildcard($wildcard, $name)) {
                $eventHandlers[] = $handlers;
            }
        }
        if (!empty($this->_events[$name])) {
            $eventHandlers[] = $this->_events[$name];
        }
        if (!empty($eventHandlers)) {
            $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
            if ($event === null) {
                $event = new Event();
            }
            if ($event->sender === null) {
                $event->sender = $this;
            }
            $event->handled = false;
            $event->name = $name;
            foreach ($eventHandlers as $handler) {
                $event->data = $handler[1];
                call_user_func($handler[0], $event);
                // stop further handling if the event is handled
                if ($event->handled) {
                    return;
                }
            }
        }
        // invoke class-level attached handlers
        Event::trigger($this, $name, $event);
    }

unlink() public method

Defined in: yii\db\BaseActiveRecord::unlink()

Destroys the relationship between two models.

The model with the foreign key of the relationship will be deleted if `$delete` is `true`. Otherwise, the foreign key will be set `null` and the model will be saved without validation.

public void unlink ( $name, $model, $delete = false )
$name | string | The case sensitive name of the relationship, e.g. `orders` for a relation defined via `getOrders()` method.
$model | yii\db\ActiveRecordInterface | The model to be unlinked from the current one. You have to make sure that the model is really related with the current model as this method does not check this.
$delete | boolean | Whether to delete the model that contains the foreign key. If `false`, the model's foreign key will be set `null` and saved. If `true`, the model containing the foreign key will be deleted.
throws | yii\base\InvalidCallException | if the models cannot be unlinked
throws | yii\db\Exception |
throws | yii\db\StaleObjectException |

Source code

                    public function unlink($name, $model, $delete = false)
    {
        /* @var $relation ActiveQueryInterface|ActiveQuery */
        $relation = $this->getRelation($name);
        if ($relation->via !== null) {
            if (is_array($relation->via)) {
                /* @var $viaRelation ActiveQuery */
                list($viaName, $viaRelation) = $relation->via;
                $viaClass = $viaRelation->modelClass;
                unset($this->_related[$viaName]);
            } else {
                $viaRelation = $relation->via;
                $viaTable = reset($relation->via->from);
            }
            $columns = [];
            foreach ($viaRelation->link as $a => $b) {
                $columns[$a] = $this->$b;
            }
            foreach ($relation->link as $a => $b) {
                $columns[$b] = $model->$a;
            }
            $nulls = [];
            foreach (array_keys($columns) as $a) {
                $nulls[$a] = null;
            }
            if (property_exists($viaRelation, 'on') && $viaRelation->on !== null) {
                $columns = ['and', $columns, $viaRelation->on];
            }
            if (is_array($relation->via)) {
                /* @var $viaClass ActiveRecordInterface */
                if ($delete) {
                    $viaClass::deleteAll($columns);
                } else {
                    $viaClass::updateAll($nulls, $columns);
                }
            } else {
                /* @var $viaTable string */
                /* @var $command Command */
                $command = static::getDb()->createCommand();
                if ($delete) {
                    $command->delete($viaTable, $columns)->execute();
                } else {
                    $command->update($viaTable, $nulls, $columns)->execute();
                }
            }
        } else {
            $p1 = $model->isPrimaryKey(array_keys($relation->link));
            $p2 = static::isPrimaryKey(array_values($relation->link));
            if ($p2) {
                if ($delete) {
                    $model->delete();
                } else {
                    foreach ($relation->link as $a => $b) {
                        $model->$a = null;
                    }
                    $model->save(false);
                }
            } elseif ($p1) {
                foreach ($relation->link as $a => $b) {
                    if (is_array($this->$b)) { // relation via array valued attribute
                        if (($key = array_search($model->$a, $this->$b, false)) !== false) {
                            $values = $this->$b;
                            unset($values[$key]);
                            $this->$b = array_values($values);
                        }
                    } else {
                        $this->$b = null;
                    }
                }
                $delete ? $this->delete() : $this->save(false);
            } else {
                throw new InvalidCallException('Unable to unlink models: the link does not involve any primary key.');
            }
        }
        if (!$relation->multiple) {
            unset($this->_related[$name]);
        } elseif (isset($this->_related[$name])) {
            /* @var $b ActiveRecordInterface */
            foreach ($this->_related[$name] as $a => $b) {
                if ($model->getPrimaryKey() === $b->getPrimaryKey()) {
                    unset($this->_related[$name][$a]);
                }
            }
        }
    }

unlinkAll() public method

Defined in: yii\db\BaseActiveRecord::unlinkAll()

Destroys the relationship in current model.

The model with the foreign key of the relationship will be deleted if `$delete` is `true`. Otherwise, the foreign key will be set `null` and the model will be saved without validation.

Note that to destroy the relationship without removing records make sure your keys can be set to null

public void unlinkAll ( $name, $delete = false )
$name | string | The case sensitive name of the relationship, e.g. `orders` for a relation defined via `getOrders()` method.
$delete | boolean | Whether to delete the model that contains the foreign key. Note that the deletion will be performed using deleteAll(), which will not trigger any events on the related models. If you need EVENT_BEFORE_DELETE or EVENT_AFTER_DELETE to be triggered, you need to find the models first and then call delete() on each of them.

Source code

                    public function unlinkAll($name, $delete = false)
    {
        /* @var $relation ActiveQueryInterface|ActiveQuery */
        $relation = $this->getRelation($name);
        if ($relation->via !== null) {
            if (is_array($relation->via)) {
                /* @var $viaRelation ActiveQuery */
                list($viaName, $viaRelation) = $relation->via;
                $viaClass = $viaRelation->modelClass;
                unset($this->_related[$viaName]);
            } else {
                $viaRelation = $relation->via;
                $viaTable = reset($relation->via->from);
            }
            $condition = [];
            $nulls = [];
            foreach ($viaRelation->link as $a => $b) {
                $nulls[$a] = null;
                $condition[$a] = $this->$b;
            }
            if (!empty($viaRelation->where)) {
                $condition = ['and', $condition, $viaRelation->where];
            }
            if (property_exists($viaRelation, 'on') && !empty($viaRelation->on)) {
                $condition = ['and', $condition, $viaRelation->on];
            }
            if (is_array($relation->via)) {
                /* @var $viaClass ActiveRecordInterface */
                if ($delete) {
                    $viaClass::deleteAll($condition);
                } else {
                    $viaClass::updateAll($nulls, $condition);
                }
            } else {
                /* @var $viaTable string */
                /* @var $command Command */
                $command = static::getDb()->createCommand();
                if ($delete) {
                    $command->delete($viaTable, $condition)->execute();
                } else {
                    $command->update($viaTable, $nulls, $condition)->execute();
                }
            }
        } else {
            /* @var $relatedModel ActiveRecordInterface */
            $relatedModel = $relation->modelClass;
            if (!$delete && count($relation->link) === 1 && is_array($this->{$b = reset($relation->link)})) {
                // relation via array valued attribute
                $this->$b = [];
                $this->save(false);
            } else {
                $nulls = [];
                $condition = [];
                foreach ($relation->link as $a => $b) {
                    $nulls[$a] = null;
                    $condition[$a] = $this->$b;
                }
                if (!empty($relation->where)) {
                    $condition = ['and', $condition, $relation->where];
                }
                if (property_exists($relation, 'on') && !empty($relation->on)) {
                    $condition = ['and', $condition, $relation->on];
                }
                if ($delete) {
                    $relatedModel::deleteAll($condition);
                } else {
                    $relatedModel::updateAll($nulls, $condition);
                }
            }
        }
        unset($this->_related[$name]);
    }

update() public method

Saves the changes to this active record into the associated database table.

This method performs the following steps in order:

1. call beforeValidate() when `$runValidation` is `true`. If beforeValidate() returns `false`, the rest of the steps will be skipped;
2. call afterValidate() when `$runValidation` is `true`. If validation failed, the rest of the steps will be skipped;
3. call beforeSave(). If beforeSave() returns `false`, the rest of the steps will be skipped;
4. save the record into database. If this fails, it will skip the rest of the steps;
5. call afterSave();

In the above step 1, 2, 3 and 5, events EVENT_BEFORE_VALIDATE, EVENT_AFTER_VALIDATE, EVENT_BEFORE_UPDATE, and EVENT_AFTER_UPDATE will be raised by the corresponding methods.

Only the changed attribute values will be saved into database.

For example, to update a customer record:

    $customer = Customer::findOne($id);
    $customer->name = $name;
    $customer->email = $email;
    $customer->update();

Note that it is possible the update does not affect any row in the table. In this case, this method will return 0. For this reason, you should use the following code to check if update() is successful or not:

    if ($customer->update() !== false) {
        // update successful
    } else {
        // update failed
    }

public integer|false update ( $runValidation = true, $attributeNames = null )
$runValidation | boolean | Whether to perform validation (calling validate()) before saving the record. Defaults to `true`. If the validation fails, the record will not be saved to the database and this method will return `false`.
$attributeNames | array | List of attributes that need to be saved. Defaults to `null`, meaning all attributes that are loaded from DB will be saved.
return | integer|false | The number of rows affected, or false if validation fails or beforeSave() stops the updating process.
throws | yii\db\StaleObjectException | if optimistic locking is enabled and the data being updated is outdated.
throws | \Exception\Throwable | in case update failed.

Source code

                    public function update($runValidation = true, $attributeNames = null)
    {
        if ($runValidation && !$this->validate($attributeNames)) {
            Yii::info('Model not updated due to validation error.', __METHOD__);
            return false;
        }
        if (!$this->isTransactional(self::OP_UPDATE)) {
            return $this->updateInternal($attributeNames);
        }
        $result = null;
        static::getDb()->transaction(function() use ($attributeNames, &$result) {
            $result = $this->updateInternal($attributeNames);
        });
        return $result;
    }

updateAll() public static method

Updates all documents in the collection using the provided attribute values and conditions.

For example, to change the status to be 1 for all customers whose status is 2:

    Customer::updateAll(['status' => 1], ['status' => 2]);

public static integer updateAll ( $attributes, $condition = [], $options = [] )
$attributes | array | Attribute values (name-value pairs) to be saved into the collection
$condition | array | Description of the objects to update. Please refer to yii\mongodb\Query::where() on how to specify this parameter.
$options | array | List of options in format: optionName => optionValue.
return | integer | The number of documents updated.

Source code

                    public static function updateAll($attributes, $condition = [], $options = [])
    {
        return static::getCollection()->update($condition, $attributes, $options);
    }

updateAllCounters() public static method

Updates all documents in the collection using the provided counter changes and conditions.

For example, to increment all customers' age by 1,

    Customer::updateAllCounters(['age' => 1]);

public static integer updateAllCounters ( $counters, $condition = [], $options = [] )
$counters | array | The counters to be updated (attribute name => increment value). Use negative values if you want to decrement the counters.
$condition | array | Description of the objects to update. Please refer to yii\mongodb\Query::where() on how to specify this parameter.
$options | array | List of options in format: optionName => optionValue.
return | integer | The number of documents updated.

Source code

                    public static function updateAllCounters($counters, $condition = [], $options = [])
    {
        return static::getCollection()->update($condition, ['$inc' => $counters], $options);
    }

updateAttributes() public method

Defined in: yii\db\BaseActiveRecord::updateAttributes()

Updates the specified attributes.

This method is a shortcut to update() when data validation is not needed and only a small set attributes need to be updated.

You may specify the attributes to be updated as name list or name-value pairs. If the latter, the corresponding attribute values will be modified accordingly. The method will then save the specified attributes into database.

Note that this method will not perform data validation and will not trigger events.

public integer updateAttributes ( $attributes )
$attributes | array | The attributes (names or name-value pairs) to be updated
return | integer | The number of rows affected.

Source code

                    public function updateAttributes($attributes)
    {
        $attrs = [];
        foreach ($attributes as $name => $value) {
            if (is_int($name)) {
                $attrs[] = $value;
            } else {
                $this->$name = $value;
                $attrs[] = $name;
            }
        }
        $values = $this->getDirtyAttributes($attrs);
        if (empty($values) || $this->getIsNewRecord()) {
            return 0;
        }
        $rows = static::updateAll($values, $this->getOldPrimaryKey(true));
        foreach ($values as $name => $value) {
            $this->_oldAttributes[$name] = $this->_attributes[$name];
        }
        return $rows;
    }

updateCounters() public method

Defined in: yii\db\BaseActiveRecord::updateCounters()

Updates one or several counter columns for the current AR object.

Note that this method differs from updateAllCounters() in that it only saves counters for the current AR object.

An example usage is as follows:

    $post = Post::findOne($id);
    $post->updateCounters(['view_count' => 1]);

See also updateAllCounters().

public boolean updateCounters ( $counters )
$counters | array | The counters to be updated (attribute name => increment value) Use negative values if you want to decrement the counters.
return | boolean | Whether the saving is successful

Source code

                    public function updateCounters($counters)
    {
        if (static::updateAllCounters($counters, $this->getOldPrimaryKey(true)) > 0) {
            foreach ($counters as $name => $value) {
                if (!isset($this->_attributes[$name])) {
                    $this->_attributes[$name] = $value;
                } else {
                    $this->_attributes[$name] += $value;
                }
                $this->_oldAttributes[$name] = $this->_attributes[$name];
            }
            return true;
        }
        return false;
    }

updateInternal() protected method

See also yii\mongodb\ActiveRecord::update().

protected void updateInternal ( $attributes = null )
$attributes |  |
throws | yii\db\StaleObjectException |

Source code

                    protected function updateInternal($attributes = null)
    {
        if (!$this->beforeSave(false)) {
            return false;
        }
        $values = $this->getDirtyAttributes($attributes);
        if (empty($values)) {
            $this->afterSave(false, $values);
            return 0;
        }
        $condition = $this->getOldPrimaryKey(true);
        $lock = $this->optimisticLock();
        if ($lock !== null) {
            if (!isset($values[$lock])) {
                $values[$lock] = $this->$lock + 1;
            }
            $condition[$lock] = $this->$lock;
        }
        // We do not check the return value of update() because it's possible
        // that it doesn't change anything and thus returns 0.
        $rows = static::getCollection()->update($condition, $values);
        if ($lock !== null && !$rows) {
            throw new StaleObjectException('The object being updated is outdated.');
        }
        if (isset($values[$lock])) {
            $this->$lock = $values[$lock];
        }
        $changedAttributes = [];
        foreach ($values as $name => $value) {
            $changedAttributes[$name] = $this->getOldAttribute($name);
            $this->setOldAttribute($name, $value);
        }
        $this->afterSave(false, $changedAttributes);
        return $rows;
    }

validate() public method

Defined in: yii\base\Model::validate()

Performs the data validation.

This method executes the validation rules applicable to the current $scenario. The following criteria are used to determine whether a rule is currently applicable:

- the rule must be associated with the attributes relevant to the current scenario;
- the rules must be effective for the current scenario.

This method will call beforeValidate() and afterValidate() before and after the actual validation, respectively. If beforeValidate() returns false, the validation will be cancelled and afterValidate() will not be called.

Errors found during the validation can be retrieved via getErrors(), getFirstErrors() and getFirstError().

public boolean validate ( $attributeNames = null, $clearErrors = true )
$attributeNames | string[]|string|null | Attribute name or list of attribute names that should be validated. If this parameter is empty, it means any attribute listed in the applicable validation rules should be validated.
$clearErrors | boolean | Whether to call clearErrors() before performing validation
return | boolean | Whether the validation is successful without any error.
throws | yii\base\InvalidArgumentException | if the current scenario is unknown.

Source code

                    public function validate($attributeNames = null, $clearErrors = true)
    {
        if ($clearErrors) {
            $this->clearErrors();
        }
        if (!$this->beforeValidate()) {
            return false;
        }
        $scenarios = $this->scenarios();
        $scenario = $this->getScenario();
        if (!isset($scenarios[$scenario])) {
            throw new InvalidArgumentException("Unknown scenario: $scenario");
        }
        if ($attributeNames === null) {
            $attributeNames = $this->activeAttributes();
        }
        $attributeNames = (array)$attributeNames;
        foreach ($this->getActiveValidators() as $validator) {
            $validator->validateAttributes($this, $attributeNames);
        }
        $this->afterValidate();
        return !$this->hasErrors();
    }

validateMultiple() public static method

Defined in: yii\base\Model::validateMultiple()

Validates multiple models.

This method will validate every model. The models being validated may be of the same or different types.

public static boolean validateMultiple ( $models, $attributeNames = null )
$models | array | The models to be validated
$attributeNames | array|null | List of attribute names that should be validated. If this parameter is empty, it means any attribute listed in the applicable validation rules should be validated.
return | boolean | Whether all models are valid. False will be returned if one or multiple models have validation error.

Source code

                    public static function validateMultiple($models, $attributeNames = null)
    {
        $valid = true;
        /* @var $model Model */
        foreach ($models as $model) {
            $valid = $model->validate($attributeNames) && $valid;
        }
        return $valid;
    }