2 位关注者

抽象类 yii\db\BaseActiveRecord

继承关系yii\db\BaseActiveRecord » yii\base\Model » yii\base\Component » yii\base\BaseObject
实现接口ArrayAccess, IteratorAggregate, yii\base\Arrayable, yii\base\Configurable, yii\base\StaticInstanceInterface, yii\db\ActiveRecordInterface
使用 Traityii\base\ArrayableTrait, yii\base\StaticInstanceTrait
子类yii\db\ActiveRecord
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/BaseActiveRecord.php

ActiveRecord 是表示关系数据(以对象形式)的类的基类。

参见 yii\db\ActiveRecord 获取具体实现。

公有属性

隐藏继承属性

属性 类型 描述 定义于
$activeValidators yii\validators\Validator[] 适用于当前 $scenario 的验证器。 yii\base\Model
$attributes array 属性值(名称 => 值)。 yii\base\Model
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$dirtyAttributes array 已更改的属性值(名称-值对)。 yii\db\BaseActiveRecord
$errors array 所有属性或指定属性的错误。 yii\base\Model
$firstErrors array 第一个错误。 yii\base\Model
$isNewRecord boolean 记录是否为新记录,在调用 save() 时应插入。 yii\db\BaseActiveRecord
$iterator ArrayIterator 用于遍历列表中项目的迭代器。 yii\base\Model
$oldAttributes array 旧属性值(名称-值对)。 yii\db\BaseActiveRecord
$oldPrimaryKey mixed 旧主键值。 yii\db\BaseActiveRecord
$primaryKey mixed 主键值。 yii\db\BaseActiveRecord
$relatedRecords array 关联记录的数组,索引为关系名称。 yii\db\BaseActiveRecord
$scenario string 此模型所在的场景。 yii\base\Model
$validators ArrayObject|yii\validators\Validator[] 模型中声明的所有验证器。 yii\base\Model

公有方法

隐藏继承方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法在通过克隆现有对象创建对象后调用。 yii\base\Model
__construct() 构造函数。 yii\base\BaseObject
__get() PHP getter 魔术方法。 yii\db\BaseActiveRecord
__isset() 检查属性值是否为 null。 yii\db\BaseActiveRecord
__set() PHP setter 魔术方法。 yii\db\BaseActiveRecord
__unset() 将组件属性设置为 null。 yii\db\BaseActiveRecord
activeAttributes() 返回当前场景中受验证的属性名称列表。 yii\base\Model
addError() 向指定属性添加新的错误。 yii\base\Model
addErrors() 添加错误列表。 yii\base\Model
afterDelete() 此方法在删除记录后调用。 yii\db\BaseActiveRecord
afterFind() 当 AR 对象被创建并使用查询结果填充时,调用此方法。 yii\db\BaseActiveRecord
afterRefresh() 当 AR 对象被刷新时,调用此方法。 yii\db\BaseActiveRecord
afterSave() 在插入或更新记录结束时调用此方法。 yii\db\BaseActiveRecord
afterValidate() 在验证结束时调用此方法。 yii\base\Model
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
attributeHints() 返回属性提示。 yii\base\Model
attributeLabels() 返回属性标签。 yii\base\Model
attributes() 返回属性名称列表。 yii\base\Model
beforeDelete() 此方法在删除记录前调用。 yii\db\BaseActiveRecord
beforeSave() 在插入或更新记录开始时调用此方法。 yii\db\BaseActiveRecord
beforeValidate() 在验证开始前调用此方法。 yii\base\Model
behaviors() 返回此组件应表现为的行为列表。 yii\base\Component
canGetProperty() 返回一个值,指示属性是否可读。 yii\db\BaseActiveRecord
canSetOldAttribute() 返回是否可以设置旧的命名属性。 yii\db\BaseActiveRecord
canSetProperty() 返回一个值,指示属性是否可写。 yii\db\BaseActiveRecord
className() 返回此类的完全限定名称。 yii\base\BaseObject
clearErrors() 删除所有属性或单个属性的错误。 yii\base\Model
createValidators() 根据 rules() 中指定的验证规则创建验证器对象。 yii\base\Model
delete() 删除与该活动记录对应的表行。 yii\db\BaseActiveRecord
deleteAll() 使用提供的条件删除表中的行。 yii\db\BaseActiveRecord
detachBehavior() 从组件分离行为。 yii\base\Component
detachBehaviors() 从组件分离所有行为。 yii\base\Component
ensureBehaviors() 确保 behaviors() 中声明的行为已附加到此组件。 yii\base\Component
equals() 返回一个值,指示给定的活动记录是否与当前记录相同。 yii\db\BaseActiveRecord
extraFields() 返回可以进一步扩展并由 toArray() 返回的字段列表。 yii\db\BaseActiveRecord
fields() 返回当未指定特定字段时,toArray() 默认应返回的字段列表。 yii\db\BaseActiveRecord
find() 为查询目的创建一个 yii\db\ActiveQueryInterface 实例。 yii\db\ActiveRecordInterface
findAll() 返回与指定主键值或一组列值匹配的活动记录模型列表。 yii\db\BaseActiveRecord
findOne() 通过主键或一组列值返回单个活动记录模型实例。 yii\db\BaseActiveRecord
formName() 返回此模型类应使用的表单名称。 yii\base\Model
generateAttributeLabel() 根据给定的属性名称生成用户友好的属性标签。 yii\base\Model
getActiveValidators() 返回适用于当前 $scenario 的验证器。 yii\base\Model
getAttribute() 返回命名的属性值。 yii\db\BaseActiveRecord
getAttributeHint() 返回指定属性的文本提示。 yii\db\BaseActiveRecord
getAttributeLabel() 返回指定属性的文本标签。 yii\db\BaseActiveRecord
getAttributes() 返回属性值。 yii\base\Model
getBehavior() 返回命名的行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
getDb() 返回此 AR 类使用的连接。 yii\db\ActiveRecordInterface
getDirtyAttributes()

返回自加载或最后保存以来已修改的属性值。 yii\db\BaseActiveRecord
getErrorSummary() 将所有属性的错误作为一维数组返回。 yii\base\Model
getErrors() 返回所有属性或单个属性的错误。 yii\base\Model
getFirstError() 返回指定属性的第一个错误。 yii\base\Model
getFirstErrors() 返回模型中每个属性的第一个错误。 yii\base\Model
getIsNewRecord() 返回一个值,指示当前记录是否为新记录。 yii\db\BaseActiveRecord
getIterator() 返回一个迭代器,用于遍历模型中的属性。 yii\base\Model
getOldAttribute() 返回命名属性的旧值。 yii\db\BaseActiveRecord
getOldAttributes() 返回旧的属性值。 yii\db\BaseActiveRecord
getOldPrimaryKey() 返回旧的主键值。 yii\db\BaseActiveRecord
getPrimaryKey() 返回主键值。 yii\db\BaseActiveRecord
getRelatedRecords() 返回所有填充的相关记录。 yii\db\BaseActiveRecord
getRelation() 返回具有指定名称的关系对象。 yii\db\BaseActiveRecord
getScenario() 返回此模型所使用的场景。 yii\base\Model
getValidators() 返回在rules()中声明的所有验证器。 yii\base\Model
hasAttribute() 返回一个值,指示模型是否具有指定名称的属性。 yii\db\BaseActiveRecord
hasErrors() 返回一个值,指示是否存在任何验证错误。 yii\base\Model
hasEventHandlers() 返回一个值,指示是否有任何处理程序附加到命名事件。 yii\base\Component
hasMany() 声明一个has-many关系。 yii\db\BaseActiveRecord
hasMethod() 返回一个值,指示是否定义了方法。 yii\base\Component
hasOne() 声明一个has-one关系。 yii\db\BaseActiveRecord
hasProperty() 返回一个值,指示是否为该组件定义了属性。 yii\base\Component
init() 初始化对象。 yii\db\BaseActiveRecord
insert() 使用此记录的属性值将记录插入数据库。 yii\db\ActiveRecordInterface
instance() 返回静态类实例,可用于获取元信息。 yii\base\StaticInstanceTrait
instantiate() 创建一个活动记录实例。 yii\db\BaseActiveRecord
isAttributeActive() 返回一个值,指示属性在当前场景中是否处于活动状态。 yii\base\Model
isAttributeChanged() 返回一个值,指示命名属性是否已更改。 yii\db\BaseActiveRecord
isAttributeRequired() 返回一个值,指示属性是否必填。 yii\base\Model
isAttributeSafe() 返回一个值,指示属性是否安全用于批量赋值。 yii\base\Model
isPrimaryKey() 返回一个值,指示给定的属性集是否表示此模型的主键。 yii\db\BaseActiveRecord
isRelationPopulated() 检查命名关系是否已填充记录。 yii\db\BaseActiveRecord
link() 建立两个模型之间的关系。 yii\db\BaseActiveRecord
load() 使用输入数据填充模型。 yii\base\Model
loadMultiple() 使用来自最终用户的数据填充一组模型。 yii\base\Model
loadRelations() 急切加载已加载的主模型的相关模型。 yii\db\BaseActiveRecord
loadRelationsFor() 急切加载已加载的主模型的相关模型。 yii\db\BaseActiveRecord
markAttributeDirty() 标记属性为脏数据。 yii\db\BaseActiveRecord
off() 从该组件分离现有的事件处理程序。 yii\base\Component
offsetExists() 返回指定偏移量处是否存在元素。 yii\db\BaseActiveRecord
offsetGet() 返回指定偏移量处的元素。 yii\base\Model
offsetSet() 设置指定偏移量处的元素。 yii\base\Model
offsetUnset() 将指定偏移量处的元素值设置为null。 yii\db\BaseActiveRecord
on() 将事件处理程序附加到事件。 yii\base\Component
onUnsafeAttribute() 当批量赋值不安全的属性时,将调用此方法。 yii\base\Model
optimisticLock() 返回用于实现乐观锁定的存储锁版本信息的列的名称。 yii\db\BaseActiveRecord
populateRecord() 使用来自数据库/存储的一行数据填充活动记录对象。 yii\db\BaseActiveRecord
populateRelation() 使用相关记录填充命名关系。 yii\db\BaseActiveRecord
primaryKey() 返回此AR类的主键**名称**。 yii\db\ActiveRecordInterface
refresh() 使用最新数据重新填充此活动记录。 yii\db\BaseActiveRecord
rules() 返回属性的验证规则。 yii\base\Model
safeAttributes() 返回在当前场景中安全用于批量赋值的属性名称。 yii\base\Model
save() 保存当前记录。 yii\db\BaseActiveRecord
scenarios() 返回场景列表和相应的活动属性。 yii\base\Model
setAttribute() 设置命名属性值。 yii\db\BaseActiveRecord
setAttributes() 以批量方式设置属性值。 yii\base\Model
setIsNewRecord() 设置指示记录是否为新记录的值。 yii\db\BaseActiveRecord
setOldAttribute() 设置命名属性的旧值。 yii\db\BaseActiveRecord
setOldAttributes() 设置旧的属性值。 yii\db\BaseActiveRecord
setScenario() 设置模型的场景。 yii\base\Model
toArray() 将模型转换为数组。 yii\base\ArrayableTrait
trigger() 触发事件。 yii\base\Component
unlink() 销毁两个模型之间的关系。 yii\db\BaseActiveRecord
unlinkAll() 销毁当前模型中的关系。 yii\db\BaseActiveRecord
update() 将此活动记录的更改保存到关联的数据库表中。 yii\db\BaseActiveRecord
updateAll() 使用提供的属性值和条件更新整个表。 yii\db\BaseActiveRecord
updateAllCounters() 使用提供的计数器更改和条件更新整个表。 yii\db\BaseActiveRecord
updateAttributes() 更新指定的属性。 yii\db\BaseActiveRecord
updateCounters() 更新当前AR对象的 一个或多个计数器列。 yii\db\BaseActiveRecord
validate() 执行数据验证。 yii\base\Model
validateMultiple() 验证多个模型。 yii\base\Model

受保护的方法

隐藏继承方法

方法 描述 定义于
createRelationQuery() has-onehas-many关系创建查询实例。 yii\db\BaseActiveRecord
extractFieldsFor() 从给定根字段的字段集合中提取嵌套字段 嵌套字段用点 (.) 分隔。 例如:“item.id” 上面的示例将提取“id”。 yii\base\ArrayableTrait
extractRootFields() 从嵌套字段中提取根字段名称。 yii\base\ArrayableTrait
refreshInternal() 使用新获取的实例重新填充此活动记录的最新数据。 yii\db\BaseActiveRecord
resolveFields() 确定哪些字段可以由toArray()返回。 yii\base\ArrayableTrait
updateInternal() yii\db\BaseActiveRecord

事件

隐藏继承的事件

事件 类型 描述 定义于
EVENT_AFTER_DELETE yii\db\Event 删除记录后触发的事件。 yii\db\BaseActiveRecord
EVENT_AFTER_FIND yii\db\Event 创建记录并使用查询结果填充记录后触发的事件。 yii\db\BaseActiveRecord
EVENT_AFTER_INSERT yii\db\AfterSaveEvent 插入记录后触发的事件。 yii\db\BaseActiveRecord
EVENT_AFTER_REFRESH yii\db\Event 刷新记录后触发的事件。(自版本 2.0.8 起可用) yii\db\BaseActiveRecord
EVENT_AFTER_UPDATE yii\db\AfterSaveEvent 更新记录后触发的事件。 yii\db\BaseActiveRecord
EVENT_AFTER_VALIDATE yii\base\Event validate()结束时引发的事件 yii\base\Model
EVENT_BEFORE_DELETE yii\base\ModelEvent 删除记录之前触发的事件。 yii\db\BaseActiveRecord
EVENT_BEFORE_INSERT yii\base\ModelEvent 插入记录之前触发的事件。 yii\db\BaseActiveRecord
EVENT_BEFORE_UPDATE yii\base\ModelEvent 更新记录之前触发的事件。 yii\db\BaseActiveRecord
EVENT_BEFORE_VALIDATE yii\base\ModelEvent validate()开始时引发的事件。 yii\base\Model
EVENT_INIT yii\db\Event 通过init()初始化记录时触发的事件。 yii\db\BaseActiveRecord

常量

隐藏继承的常量

常量 描述 定义于
SCENARIO_DEFAULT 'default' 默认场景的名称。 yii\base\Model

属性详情

隐藏继承属性

$dirtyAttributes 公共属性

已更改的属性值(名称-值对)。

public array $dirtyAttributes null
$isNewRecord 公共属性

记录是否为新记录,在调用 save() 时应插入。

public boolean $isNewRecord null
$oldAttributes 公共属性

旧的属性值(名称-值对)。请注意,此属性在 getter 和 setter 中的类型不同。有关详细信息,请参阅getOldAttributes()setOldAttributes()

public array $oldAttributes null
$oldPrimaryKey 公共属性

旧的主键值。如果主键是复合主键或$asArraytrue,则返回数组(列名=>列值)。否则返回字符串(如果键值为null,则返回null)。

public mixed $oldPrimaryKey null
$primaryKey 公共属性

主键值。如果主键是复合主键或$asArraytrue,则返回一个数组(列名=>列值)。否则返回一个字符串(如果键值为null,则返回null)。

public mixed $primaryKey null
$relatedRecords 公共属性

关联记录的数组,索引为关系名称。

public array $relatedRecords null

方法详情

隐藏继承方法

__call() 公共方法

定义于: yii\base\Component::__call()

调用不是类方法的命名方法。

此方法将检查任何附加的行为是否具有指定的方法,如果可用则执行它。

不要直接调用此方法,因为它是一个PHP魔术方法,当调用未知方法时会隐式调用。

public mixed __call ( $name, $params )
$name string

方法名

$params array

方法参数

返回值 mixed

方法返回值

抛出异常 yii\base\UnknownMethodException

调用未知方法时

                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() 公共方法

定义于: yii\base\Model::__clone()

此方法在通过克隆现有对象创建对象后调用。

它删除所有行为,因为它们附加到旧对象。

public void __clone ( )

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

            
__construct() 公共方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现执行两件事

  • 使用给定的配置$config初始化对象。
  • 调用init()

如果此方法在子类中被重写,建议

  • 构造函数的最后一个参数是一个配置数组,就像这里的$config一样。
  • 在构造函数的末尾调用父实现。
public void __construct ( $config = [] )
$config array

将用于初始化对象属性的名称-值对

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

            
__get() 公共方法

PHP getter 魔术方法。

此方法被重写,以便可以像属性一样访问属性和相关对象。

另请参见getAttribute()

public mixed __get ( $name )
$name string

属性名

返回值 mixed

属性值

抛出异常 yii\base\InvalidArgumentException

如果关系名称错误

                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() 公共方法

检查属性值是否为 null。

此方法通过检查指定属性是否为null来覆盖父实现。

public boolean __isset ( $name )
$name string

属性名或事件名

返回值 boolean

属性值是否为null

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

            
__set() 公共方法

PHP setter 魔术方法。

此方法被重写,以便可以像属性一样访问AR属性。

public void __set ( $name, $value )
$name string

属性名

$value mixed

属性值

                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() 公共方法

将组件属性设置为 null。

此方法通过清除指定的属性值来覆盖父实现。

public void __unset ( $name )
$name string

属性名或事件名

                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() 公共方法

定义于: yii\base\Model::activeAttributes()

返回当前场景中受验证的属性名称列表。

public string[] activeAttributes ( )
返回值 string[]

安全属性名称

                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() 公共方法

定义于: yii\base\Model::addError()

向指定属性添加新的错误。

public void addError ( $attribute, $error '' )
$attribute string

属性名

$error string

新的错误消息

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

            
addErrors() 公共方法 (自版本 2.0.2 起可用)

定义于: yii\base\Model::addErrors()

添加错误列表。

public void addErrors ( array $items )
$items array

错误列表。数组键必须是属性名。数组值应该是错误消息。如果一个属性有多个错误,则必须以数组的形式给出这些错误。您可以使用getErrors()的结果作为此参数的值。

                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() 公共方法

此方法在删除记录后调用。

默认实现引发EVENT_AFTER_DELETE事件。您可以重写此方法以在记录被删除后执行后处理。确保调用父实现,以便正确引发事件。

public void afterDelete ( )

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

            
afterFind() 公共方法

当 AR 对象被创建并使用查询结果填充时,调用此方法。

默认实现将触发 EVENT_AFTER_FIND 事件。覆盖此方法时,请确保调用父类实现以确保事件被触发。

public void afterFind ( )

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

            
afterRefresh() public 方法 (自 2.0.8 版本起可用)

当 AR 对象被刷新时,调用此方法。

默认实现将触发 EVENT_AFTER_REFRESH 事件。覆盖此方法时,请确保调用父类实现以确保事件被触发。

public void afterRefresh ( )

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

            
afterSave() public 方法

在插入或更新记录结束时调用此方法。

默认实现将在 $inserttrue 时触发 EVENT_AFTER_INSERT 事件,或在 $insertfalse 时触发 EVENT_AFTER_UPDATE 事件。使用的事件类是 yii\db\AfterSaveEvent。覆盖此方法时,请确保调用父类实现,以便触发事件。

public void afterSave ( $insert, $changedAttributes )
$insert boolean

此方法是否在插入记录时调用。如果为 false,则表示该方法在更新记录时被调用。

$changedAttributes array

已更改并已保存的属性的旧值。您可以使用此参数根据所做的更改采取操作,例如在密码更改时发送电子邮件或实现跟踪所有更改的审计跟踪。$changedAttributes 提供旧属性值,而活动记录 ($this) 已经拥有新的、更新后的值。

请注意,默认情况下不执行自动类型转换。您可以使用 yii\behaviors\AttributeTypecastBehavior 来促进属性类型转换。参见 https://yiiframework.cn/doc-2.0/guide-db-active-record.html#attributes-typecasting

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

            
afterValidate() public 方法

定义于: yii\base\Model::afterValidate()

在验证结束时调用此方法。

默认实现引发 afterValidate 事件。您可以覆盖此方法以在验证后执行后处理。请确保调用父类实现,以便可以引发事件。

public void afterValidate ( )

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

            
attachBehavior() public 方法

定义于: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。

另见 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行为的名称。

$behavior 字符串|数组|yii\base\Behavior

行为配置。可以是以下之一

返回值 yii\base\Behavior

行为对象

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

            
attachBehaviors() public 方法

定义于: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都由其名称索引,并且应该是一个 yii\base\Behavior 对象、一个指定行为类的字符串或一个用于创建行为的配置数组。

另见 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到组件的行为列表

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

            
attributeHints() public 方法 (自 2.0.4 版本起可用)

定义于: yii\base\Model::attributeHints()

返回属性提示。

属性提示主要用于显示目的。例如,给定一个属性 isPublic,我们可以声明一个提示 Whether the post should be visible for not logged in users,它提供了属性含义的用户友好描述,可以显示给最终用户。

与标签不同,如果省略了显式声明,则不会生成提示。

注意,为了继承父类中定义的提示,子类需要使用 array_merge() 等函数将父提示与子提示合并。

public 数组 attributeHints ( )
返回值 array

属性提示 (名称 => 提示)

                public function attributeHints()
{
    return [];
}

            
attributeLabels() public 方法

定义于: yii\base\Model::attributeLabels()

返回属性标签。

属性标签主要用于显示目的。例如,给定一个属性 firstName,我们可以声明一个标签 First Name,它更友好,可以显示给最终用户。

默认情况下,属性标签使用 generateAttributeLabel() 生成。此方法允许您显式指定属性标签。

注意,为了继承父类中定义的标签,子类需要使用 array_merge() 等函数将父标签与子标签合并。

另见 generateAttributeLabel()

public 数组 attributeLabels ( )
返回值 array

属性标签 (名称 => 标签)

                public function attributeLabels()
{
    return [];
}

            
attributes() public 方法

定义于: yii\base\Model::attributes()

返回属性名称列表。

默认情况下,此方法返回类所有公有的非静态属性。您可以覆盖此方法以更改默认行为。

public 字符串[] attributes ( )
返回值 string[]

属性名称列表。

                public function attributes()
{
    $class = new ReflectionClass($this);
    $names = [];
    foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) {
        if (!$property->isStatic()) {
            $names[] = $property->getName();
        }
    }
    return $names;
}

            
beforeDelete() public 方法

此方法在删除记录前调用。

默认实现引发 EVENT_BEFORE_DELETE 事件。覆盖此方法时,请确保像下面这样调用父类实现

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

    // ...custom code here...
    return true;
}
public 布尔值 beforeDelete ( )
返回值 boolean

是否应删除记录。默认为 true

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

            
beforeSave() 公共方法

在插入或更新记录开始时调用此方法。

默认实现将在 $inserttrue 时触发 EVENT_BEFORE_INSERT 事件,或者在 $insertfalse 时触发 EVENT_BEFORE_UPDATE 事件。覆盖此方法时,请确保像下面这样调用父方法实现

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

    // ...custom code here...
    return true;
}
public 布尔型 beforeSave ( $insert )
$insert boolean

此方法是否在插入记录时调用。如果为 false,则表示该方法在更新记录时被调用。

返回值 boolean

是否应继续插入或更新。如果为 false,则插入或更新将被取消。

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

            
beforeValidate() 公共方法

定义于: yii\base\Model::beforeValidate()

在验证开始前调用此方法。

默认实现会引发 beforeValidate 事件。您可以覆盖此方法,在验证之前进行初步检查。请确保调用了父方法实现,以便可以引发该事件。

public 布尔型 beforeValidate ( )
返回值 boolean

是否应执行验证。默认为 true。如果返回 false,则验证将停止,并且模型被视为无效。

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

            
behaviors() 公共方法

定义于: yii\base\Component::behaviors()

返回此组件应表现为的行为列表。

子类可以覆盖此方法来指定它们希望表现出的行为。

此方法的返回值应为行为对象的数组或配置,以行为名称为索引。行为配置可以是指定行为类的字符串,也可以是以下结构的数组

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

请注意,行为类必须扩展自 yii\base\Behavior。可以使用名称或匿名方式附加行为。当使用数组键作为名称时,可以使用此名称,稍后可以使用 getBehavior() 检索行为,或使用 detachBehavior() 分离行为。无法检索或分离匿名行为。

在此方法中声明的行为将自动附加到组件(按需)。

public 数组 behaviors ( )
返回值 array

行为配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公共方法

返回一个值,指示属性是否可读。

如果可以读取属性,则

  • 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的可读属性(当 $checkBehaviors 为 true 时)。
public 布尔型 canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可读

                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() 公共方法

返回是否可以设置旧的命名属性。

另请参见 setOldAttribute()

public 布尔型 canSetOldAttribute ( $name )
$name string

属性名称

返回值 boolean

旧属性是否可设置

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

            
canSetProperty() 公共方法

返回一个值,指示属性是否可写。

如果可以写入属性,则

  • 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的可写属性(当 $checkBehaviors 为 true 时)。
public 布尔型 canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否可写

                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() 公共静态方法
自 2.0.14 版起已弃用。在 PHP >=5.5 上,请改用 ::class

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static 字符串 className ( )
返回值 string

此类的完全限定名称。

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

            
clearErrors() 公共方法

定义于: yii\base\Model::clearErrors()

删除所有属性或单个属性的错误。

public void clearErrors ( $attribute null )
$attribute 字符串|

属性名称。使用 null 删除所有属性的错误。

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

            
createRelationQuery() 受保护方法 (自版本 2.0.12 起可用)

has-onehas-many关系创建查询实例。

另请参见

protected yii\db\ActiveQueryInterface createRelationQuery ( $class, $link, $multiple )
$class string

相关记录的类名。

$link array

主键-外键约束。

$multiple boolean

此查询是否表示与多个记录的关系。

返回值 yii\db\ActiveQueryInterface

关系查询对象。

                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() 公共方法

定义于: yii\base\Model::createValidators()

根据 rules() 中指定的验证规则创建验证器对象。

getValidators() 不同,每次调用此方法时,都会返回新的验证器列表。

public ArrayObject createValidators ( )
返回值 ArrayObject

验证器

抛出异常 yii\base\InvalidConfigException

如果任何验证规则配置无效

                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() 公共方法

删除与该活动记录对应的表行。

此方法按顺序执行以下步骤

  1. 调用 beforeDelete()。如果此方法返回 false,则跳过其余步骤;
  2. 从数据库中删除记录;
  3. 调用 afterDelete()

在上述步骤 1 和 3 中,名为 EVENT_BEFORE_DELETEEVENT_AFTER_DELETE 的事件将由相应的方法触发。

public integer|false delete ( )
返回值 integer|false

删除的行数,如果由于某种原因删除不成功,则返回 false。请注意,即使删除操作成功,删除的行数也可能为 0。

抛出异常 yii\db\StaleObjectException

如果启用了 乐观锁 并且要删除的数据已过时。

抛出异常 yii\db\Exception

如果删除失败。

                public function delete()
{
    $result = false;
    if ($this->beforeDelete()) {
        // 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::deleteAll($condition);
        if ($lock !== null && !$result) {
            throw new StaleObjectException('The object being deleted is outdated.');
        }
        $this->_oldAttributes = null;
        $this->afterDelete();
    }
    return $result;
}

            
deleteAll() 公共静态方法

使用提供的条件删除表中的行。

警告:如果不指定任何条件,此方法将删除表中的所有行。

例如,要删除所有状态为 3 的客户

Customer::deleteAll('status = 3');
public static integer deleteAll ( $condition null )
$condition string|array|null

将放置在 DELETE SQL 的 WHERE 部分中的条件。请参阅 yii\db\Query::where() 以了解如何指定此参数。

返回值 integer

删除的行数

抛出异常 yii\base\NotSupportedException

如果未重写。

                public static function deleteAll($condition = null)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported.');
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行为的名称。

返回值 yii\base\Behavior|null

分离的行为。如果行为不存在,则为 Null。

                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() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件分离所有行为。

public void detachBehaviors ( )

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

            
ensureBehaviors() 公共方法

定义于: yii\base\Component::ensureBehaviors()

确保 behaviors() 中声明的行为已附加到此组件。

public void ensureBehaviors ( )

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

            
equals() 公共方法

返回一个值,指示给定的活动记录是否与当前记录相同。

比较是通过比较两个活动记录的表名和主键值来进行的。如果其中一个记录 是新的,则也认为它们不相等。

public boolean equals ( $record )
$record yii\db\ActiveRecordInterface

要比较的记录

返回值 boolean

这两个活动记录是否引用同一数据库表中的同一行。

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

            
extraFields() 公共方法

返回可以进一步扩展并由 toArray() 返回的字段列表。

默认实现返回已填充到此记录中的关系的名称。

此方法类似于 fields(),但此方法返回的字段列表默认情况下不会由 toArray() 返回。只有在调用 toArray() 时显式指定要扩展的字段名称,才会导出其值。

默认实现返回一个空数组。

您可以重写此方法以根据某些上下文信息(例如当前应用程序用户)返回可扩展字段的列表。

public array extraFields ( )
返回值 array

可扩展字段名称或字段定义的列表。请参阅 fields() 以了解返回值的格式。

                public function extraFields()
{
    $fields = array_keys($this->getRelatedRecords());
    return array_combine($fields, $fields);
}

            
extractFieldsFor() 受保护方法 (自版本 2.0.14 起可用)

定义于: yii\base\ArrayableTrait::extractFieldsFor()

从给定根字段的字段集合中提取嵌套字段 嵌套字段用点 (.) 分隔。 例如:“item.id” 上面的示例将提取“id”。

protected array extractFieldsFor ( array $fields, $rootField )
$fields array

请求提取的字段

$rootField string

我们要为其提取嵌套字段的根字段

返回值 array

为给定字段提取的嵌套字段

                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() 受保护方法 (自版本 2.0.14 起可用)

定义于: yii\base\ArrayableTrait::extractRootFields()

从嵌套字段中提取根字段名称。

嵌套字段用点 (.) 分隔。例如:“item.id” 上面的示例将提取“item”。

protected array extractRootFields ( array $fields )
$fields array

请求提取的字段

返回值 array

从给定的嵌套字段中提取的根字段

                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() 公共方法

返回当未指定特定字段时,toArray() 默认应返回的字段列表。

默认实现返回已填充到此记录中的列的名称。

字段是 toArray() 返回的数组中的命名元素。

此方法应返回字段名称或字段定义的数组。如果是前者,则字段名称将被视为对象属性名称,其值将用作字段值。如果是后者,则数组键应为字段名称,而数组值应为相应的字段定义,该定义可以是对象属性名称或返回相应字段值的 PHP 可调用对象。可调用对象的签名应为

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

例如,以下代码声明了四个字段

  • email:字段名称与属性名称 email 相同;
  • firstNamelastName:字段名称分别为 firstNamelastName,其值分别从 first_namelast_name 属性获取。
  • fullName:字段名称为 fullName。其值通过拼接 first_namelast_name 获得。
return [
    'email',
    'firstName' => 'first_name',
    'lastName' => 'last_name',
    'fullName' => function ($model) {
        return $model->first_name . ' ' . $model->last_name;
    },
];

在此方法中,您可能也希望根据一些上下文信息返回不同的字段列表。例如,根据 $scenario 或当前应用程序用户的权限,您可以返回不同的可见字段集或过滤掉某些字段。

此方法的默认实现返回 attributes(),并使用相同的属性名称作为索引。

public array fields ( )
返回值 array

字段名称或字段定义的列表。

                public function fields()
{
    $fields = array_keys($this->_attributes);
    return array_combine($fields, $fields);
}

            
find() public abstract static 方法

定义于: yii\db\ActiveRecordInterface::find()

为查询目的创建一个 yii\db\ActiveQueryInterface 实例。

返回的 yii\db\ActiveQueryInterface 实例可以通过调用 yii\db\ActiveQueryInterface 中定义的方法进一步自定义,然后再调用 one()all() 返回填充的 ActiveRecord 实例。例如,

// 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();

此方法也被 yii\db\BaseActiveRecord::hasOne()yii\db\BaseActiveRecord::hasMany() 调用以创建关系查询。

您可以重写此方法以返回自定义查询。例如,

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

以下代码显示了如何为所有查询应用默认条件

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 abstract static yii\db\ActiveQueryInterface find ( )
返回值 yii\db\ActiveQueryInterface

新创建的 yii\db\ActiveQueryInterface 实例。

                public static function find();

            
findAll() public static 方法

返回与指定主键值或一组列值匹配的活动记录模型列表。

此方法接受

  • 标量值(整数或字符串):根据单个主键值查询并返回包含相应记录的数组(如果未找到则返回空数组)。
  • 非关联数组:根据主键值列表查询并返回相应的记录(如果未找到则返回空数组)。请注意,空条件将导致空结果,因为它将被解释为主键搜索,而不是空 WHERE 条件。
  • 名称-值对的关联数组:根据一组属性值查询并返回匹配所有属性值的记录数组(如果未找到则返回空数组)。请注意,['id' => 1, 2] 被视为非关联数组。对于 SQL DBMS,列名限制为当前记录表的列,否则将被过滤以限制为简单的过滤条件。
  • yii\db\Expression:表达式将直接使用。(@since 2.0.37)

此方法将自动调用 all() 方法并返回一个 ActiveRecord 实例数组。

注意:由于这只是一个简写方法,因此使用更复杂的条件(如 ['!=', 'id', 1])将不起作用。如果需要指定更复杂的条件,请使用 find() 并结合 where() 使用。

请参阅以下代码了解用法示例

// 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();

如果需要将用户输入传递给此方法,请确保输入值是标量,或者在数组条件的情况下,请确保数组结构无法从外部更改。

// 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

主键值或一组列值

返回值 static[]

ActiveRecord 实例数组,如果没有任何匹配项则为空数组。

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

            
findOne() public static 方法

通过主键或一组列值返回单个活动记录模型实例。

此方法接受

  • 标量值(整数或字符串):根据单个主键值查询并返回相应的记录(如果未找到则返回 null)。
  • 非关联数组:根据主键值列表查询并返回第一条记录(如果未找到则返回 null)。
  • 名称-值对的关联数组:根据一组属性值查询并返回匹配所有属性值的一条记录(如果未找到则返回 null)。请注意,['id' => 1, 2] 被视为非关联数组。列名限制为当前记录表的列(对于 SQL DBMS),否则将被过滤以限制为简单的过滤条件。
  • yii\db\Expression:表达式将直接使用。(@since 2.0.37)

此方法将自动调用 one() 方法并返回一个 ActiveRecord 实例。

注意:由于这只是一个简写方法,因此使用更复杂的条件(如 ['!=', 'id', 1])将不起作用。如果需要指定更复杂的条件,请使用 find() 并结合 where() 使用。

请参阅以下代码了解用法示例

// 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();

如果需要将用户输入传递给此方法,请确保输入值是标量,或者在数组条件的情况下,请确保数组结构无法从外部更改。

// 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

主键值或一组列值

返回值 static|null

与条件匹配的 ActiveRecord 实例,如果没有任何匹配项则返回 null

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

            
formName() public 方法

定义于: yii\base\Model::formName()

返回此模型类应使用的表单名称。

表单名称主要由 yii\widgets\ActiveForm 用于确定如何为模型中的属性命名输入字段。如果表单名称为“A”且属性名称为“b”,则相应的输入名称将为“A[b]”。如果表单名称为空字符串,则输入名称将为“b”。

上述命名方案的目的是,对于包含多个不同模型的表单,每个模型的属性都分组在 POST 数据的子数组中,并且更容易区分它们。

默认情况下,此方法返回模型类名(不包括命名空间部分)作为表单名称。当模型用于不同的表单时,您可以重写它。

另请参阅 load()

public string formName ( )
返回值 string

此模型类的表单名称。

抛出异常 yii\base\InvalidConfigException

当表单使用匿名类定义并且未重写 formName() 方法时。

                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 方法

定义于: yii\base\Model::generateAttributeLabel()

根据给定的属性名称生成用户友好的属性标签。

这是通过用空格替换下划线、破折号和点,并将每个单词的首字母更改为大写来完成的。例如,“department_name”或“DepartmentName”将生成“Department Name”。

public string generateAttributeLabel ( $name )
$name string

列名

返回值 string

属性标签

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

            
getActiveValidators() public 方法

定义于: yii\base\Model::getActiveValidators()

返回适用于当前 $scenario 的验证器。

public yii\validators\Validator[] getActiveValidators ( $attribute null )
$attribute 字符串|

应返回其适用验证器的属性的名称。如果此值为 null,则将返回模型中所有属性的验证器。

返回值 yii\validators\Validator[]

适用于当前 $scenario 的验证器。

                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 方法

返回命名的属性值。

如果此记录是查询的结果并且未加载属性,则将返回 null

另请参阅 hasAttribute()

public mixed getAttribute ( $name )
$name string

属性名称

返回值 mixed

属性值。如果未设置属性或属性不存在,则为 null

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

            
getAttributeHint() 公共方法 (自版本 2.0.4 起可用)

返回指定属性的文本提示。

如果属性看起来像 relatedModel.attribute,则该属性将从关联模型中获取。

另请参阅 attributeHints()

public string getAttributeHint ( $attribute )
$attribute string

属性名称

返回值 string

属性提示

                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() 公共方法

返回指定属性的文本标签。

属性可以用点格式指定,以便从关联模型中检索标签或允许此模型覆盖关联模型中定义的标签。例如,如果属性指定为“relatedModel1.relatedModel2.attr”,则该函数将按以下顺序返回找到的第一个标签定义

  • 在此模型的 attributeLabels() 中定义的“relatedModel1.relatedModel2.attr”的标签;
  • 在此模型的“relatedModel1”关系所表示的关联模型中定义的“relatedModel2.attr”的标签;
  • 在“relatedModel1”关系的“relatedModel2”关系所表示的关联模型中定义的“attr”的标签。如果没有找到标签定义,则将返回 $this->generateAttributeLabel('relatedModel1.relatedModel2.attr') 的值。

另请参见

public string getAttributeLabel ( $attribute )
$attribute string

属性名称

返回值 string

属性标签

                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() 公共方法

定义于: yii\base\Model::getAttributes()

返回属性值。

public array getAttributes ( $names null, $except = [] )
$names array|null

需要返回其值的属性列表。默认为 null,这意味着将返回 attributes() 中列出的所有属性。如果它是一个数组,则只返回数组中的属性。

$except array

不应返回其值的属性列表。

返回值 array

属性值(名称 => 值)。

                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() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名的行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行为名称

返回值 yii\base\Behavior|null

行为对象,如果行为不存在则为 null

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

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
返回值 yii\base\Behavior[]

附加到此组件的行为列表

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

            
getDb() 公共抽象静态方法

定义于: yii\db\ActiveRecordInterface::getDb()

返回此 AR 类使用的连接。

public abstract static mixed getDb ( )
返回值 mixed

此 AR 类使用的数据库连接。

                public static function getDb();

            
getDirtyAttributes() 公共方法

返回自加载或最后保存以来已修改的属性值。

新旧值的比较使用 === 进行相同值的比较。

public array getDirtyAttributes ( $names null )
$names string[]|null

如果最近更改了属性的值,则可能会返回其名称的属性。如果为 null,则将使用 attributes()

返回值 array

已更改的属性值(名称-值对)

                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() 公共方法 (自版本 2.0.14 起可用)

定义于: yii\base\Model::getErrorSummary()

将所有属性的错误作为一维数组返回。

另请参见

public array getErrorSummary ( $showAllErrors )
$showAllErrors boolean

布尔值,如果设置为 true,则将显示每个属性的每个错误消息,否则只显示每个属性的第一个错误消息。

返回值 array

所有属性的错误,作为一维数组。如果无错误,则返回空数组。

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

            
getErrors() 公共方法

定义于: yii\base\Model::getErrors()

返回所有属性或单个属性的错误。

另请参见

public array getErrors ( $attribute null )
$attribute 字符串|

属性名称。使用 null 检索所有属性的错误。

返回值 array

所有属性或指定属性的错误。如果无错误,则返回空数组。有关详细说明,请参阅 getErrors()。请注意,在返回所有属性的错误时,结果是一个二维数组,如下所示

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

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

            
getFirstError() 公共方法

定义于: yii\base\Model::getFirstError()

返回指定属性的第一个错误。

另请参见

public string|null getFirstError ( $attribute )
$attribute string

属性名称。

返回值 字符串|

错误消息。如果无错误,则返回 Null。

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

            
getFirstErrors() 公共方法

定义于: yii\base\Model::getFirstErrors()

返回模型中每个属性的第一个错误。

另请参见

public array getFirstErrors ( )

返回值 array

第一个错误。数组键是属性名称,数组值是相应的错误消息。如果没有错误,则返回一个空数组。

                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 boolean getIsNewRecord ( )
返回值 boolean

记录是否为新记录,在调用 save() 时应插入。

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

            
getIterator() 公共方法

定义于: yii\base\Model::getIterator()

返回一个迭代器,用于遍历模型中的属性。

此方法是 IteratorAggregate 接口所必需的。

public ArrayIterator getIterator ( )
返回值 ArrayIterator

用于遍历列表中项目的迭代器。

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

            
getOldAttribute() 公共方法

返回命名属性的旧值。

如果此记录是查询的结果并且未加载属性,则将返回 null

另请参阅 hasAttribute()

public mixed getOldAttribute ( $name )
$name string

属性名称

返回值 mixed

旧属性值。如果属性之前未加载或不存在,则为 null

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

            
getOldAttributes() 公共方法

返回旧的属性值。

public array getOldAttributes ( )
返回值 array

旧属性值(名称-值对)

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

            
getOldPrimaryKey() 公共方法

返回旧的主键值。

这指的是在执行 find 方法(例如 find()、findOne())后填充到记录中的主键值。即使手动为主键属性分配了不同的值,该值也会保持不变。

public mixed getOldPrimaryKey ( $asArray false )
$asArray boolean

是否以数组形式返回主键值。如果为 true,则返回值将是一个数组,其中列名作为键,列值作为值。如果为 false(默认值),则对于非复合主键将返回标量值。

返回值 mixed

旧的主键值。如果主键是复合主键或$asArraytrue,则返回数组(列名=>列值)。否则返回字符串(如果键值为null,则返回null)。

抛出异常 yii\db\Exception

如果 AR 模型没有主键

                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 mixed getPrimaryKey ( $asArray false )
$asArray boolean

是否以数组形式返回主键值。如果为 true,则返回值将是一个数组,其中列名作为键,列值作为值。请注意,对于复合主键,无论此参数值如何,都将始终返回数组。

返回值 mixed

主键值。如果主键是复合主键或$asArraytrue,则返回一个数组(列名=>列值)。否则返回一个字符串(如果键值为null,则返回null)。

                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() 公共方法

返回所有填充的相关记录。

另请参阅 getRelation()

public array getRelatedRecords ( )
返回值 array

关联记录的数组,索引为关系名称。

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

            
getRelation() 公共方法

返回具有指定名称的关系对象。

关系由一个 getter 方法定义,该方法返回一个 yii\db\ActiveQueryInterface 对象。它可以在 Active Record 类本身或其行为之一中声明。

public yii\db\ActiveQueryInterface|yii\db\ActiveQuery|null getRelation ( $name, $throwException true )
$name string

关系名称,例如 orders 用于通过 getOrders() 方法定义的关系(区分大小写)。

$throwException boolean

如果关系不存在,是否抛出异常。

返回值 yii\db\ActiveQueryInterface|yii\db\ActiveQuery|null

关系查询对象。如果关系不存在且 $throwExceptionfalse,则返回 null

抛出异常 yii\base\InvalidArgumentException

如果指定的关联不存在。

                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() 公共方法

定义于: yii\base\Model::getScenario()

返回此模型所使用的场景。

场景会影响验证的执行方式以及哪些属性可以进行批量赋值。

public string getScenario ( )
返回值 string

此模型所在的场景。默认为 SCENARIO_DEFAULT

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

            
getValidators() 公共方法

定义于: yii\base\Model::getValidators()

返回在rules()中声明的所有验证器。

此方法与 getActiveValidators() 不同,后者仅返回适用于当前 $scenario 的验证器。

因为此方法返回一个 ArrayObject 对象,所以您可以通过插入或删除验证器来操作它(在模型行为中很有用)。例如,

$model->validators[] = $newValidator;
public ArrayObject|yii\validators\Validator[] getValidators ( )
返回值 ArrayObject|yii\validators\Validator[]

模型中声明的所有验证器。

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

            
hasAttribute() 公共方法

返回一个值,指示模型是否具有指定名称的属性。

public boolean hasAttribute ( $name )
$name string

属性的名称

返回值 boolean

模型是否具有指定名称的属性。

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

            
hasErrors() 公共方法

定义于: yii\base\Model::hasErrors()

返回一个值,指示是否存在任何验证错误。

public boolean hasErrors ( $attribute null )
$attribute 字符串|

属性名称。使用 null 检查所有属性。

返回值 boolean

是否存在任何错误。

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

            
hasEventHandlers() 公共方法

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示是否有任何处理程序附加到命名事件。

public 布尔型 hasEventHandlers ( $name )
$name string

事件名称

返回值 boolean

是否存在任何附加到事件的处理程序。

                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() 公共方法

声明一个has-many关系。

声明以关联 yii\db\ActiveQuery 实例的形式返回,通过该实例可以查询和检索相关的记录。

has-many 关系意味着有多条相关记录与该关系设置的条件匹配,例如,一个客户有多个订单。

例如,要为 Customer 类声明 orders 关系,可以在 Customer 类中编写以下代码

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

请注意,在上面的 $link 参数中,'customer_id' 键指的是相关类 Order 中的属性名称,而 'id' 值指的是当前 AR 类中的属性名称。

调用 yii\db\ActiveQuery 中声明的方法以进一步自定义关系。

public yii\db\ActiveQueryInterface hasMany ( $class, $link )
$class string

相关记录的类名

$link array

主键-外键约束。数组的键指的是与 $class 模型关联的记录的属性,而数组的值指的是**此** AR 类中相应的属性。

返回值 yii\db\ActiveQueryInterface

关系查询对象。

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

            
hasMethod() 公共方法

定义于: yii\base\Component::hasMethod()

返回一个值,指示是否定义了方法。

如果以下情况则定义了一个方法:

  • 类具有指定名称的方法
  • 附加的行为具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public 布尔型 hasMethod ( $name, $checkBehaviors true )
$name string

属性名称

$checkBehaviors boolean

是否将行为的方法视为此组件的方法

返回值 boolean

方法是否已定义

                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() 公共方法

声明一个has-one关系。

声明以关联 yii\db\ActiveQuery 实例的形式返回,通过该实例可以查询和检索相关的记录。

has-one 关系意味着最多有一条相关记录与该关系设置的条件匹配,例如,一个客户对应一个国家。

例如,要为 Customer 类声明 country 关系,可以在 Customer 类中编写以下代码

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

请注意,在上面的 $link 参数中,'id' 键指的是相关类 Country 中的属性名称,而 'country_id' 值指的是当前 AR 类中的属性名称。

调用 yii\db\ActiveQuery 中声明的方法以进一步自定义关系。

public yii\db\ActiveQueryInterface hasOne ( $class, $link )
$class string

相关记录的类名

$link array

主键-外键约束。数组的键指的是与 $class 模型关联的记录的属性,而数组的值指的是**此** AR 类中相应的属性。

返回值 yii\db\ActiveQueryInterface

关系查询对象。

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

            
hasProperty() 公共方法

定义于: yii\base\Component::hasProperty()

返回一个值,指示是否为该组件定义了属性。

如果以下情况则定义了一个属性:

  • 类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);
  • 附加的行为具有给定名称的属性(当 $checkBehaviors 为 true 时)。

另请参见

public 布尔型 hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

返回值 boolean

属性是否已定义

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

            
init() 公共方法

初始化对象。

此方法在构造函数结束时调用。默认实现将触发 EVENT_INIT 事件。

public void init ( )

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

            
insert() 公共抽象方法

定义于: yii\db\ActiveRecordInterface::insert()

使用此记录的属性值将记录插入数据库。

用法示例

$customer = new Customer;
$customer->name = $name;
$customer->email = $email;
$customer->insert();
public abstract 布尔型 insert ( $runValidation true, $attributes null )
$runValidation boolean

是否在保存记录之前执行验证(调用 validate())。默认为 true。如果验证失败,则不会将记录保存到数据库,并且此方法将返回 false

$attributes array|null

需要保存的属性列表。默认为 null,表示将保存从数据库加载的所有属性。

返回值 boolean

属性是否有效以及记录是否成功插入。

                public function insert($runValidation = true, $attributes = null);

            
instance() 公共静态方法

定义于: yii\base\StaticInstanceTrait::instance()

返回静态类实例,可用于获取元信息。

public static 静态 instance ( $refresh false )
$refresh boolean

即使静态实例已缓存,是否重新创建它。

返回值 静态

类实例。

                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() 公共静态方法

创建一个活动记录实例。

此方法与 populateRecord() 一起由 yii\db\ActiveQuery 调用。它并非旨在直接用于创建新记录。

如果要创建的实例取决于要填充到记录中的行数据,则可以覆盖此方法。例如,通过基于列的值创建记录,可以实现所谓的单表继承映射。

public static 静态 instantiate ( $row )
$row array

要填充到记录中的行数据。

返回值 静态

新创建的活动记录

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

            
isAttributeActive() 公共方法

定义于: yii\base\Model::isAttributeActive()

返回一个值,指示属性在当前场景中是否处于活动状态。

另请参见 activeAttributes()

public 布尔型 isAttributeActive ( $attribute )
$attribute string

属性名

返回值 boolean

属性在当前场景下是否激活

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

            
isAttributeChanged() 公共方法

返回一个值,指示命名属性是否已更改。

public 布尔型 isAttributeChanged ( $name, $identical true )
$name string

属性的名称。

$identical boolean

新旧值是否使用 === 进行完全相同值的比较,默认为 true。否则使用 == 进行比较。此参数自 2.0.4 版本起可用。

返回值 boolean

属性是否已更改

                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() 公共方法

定义于: yii\base\Model::isAttributeRequired()

返回一个值,指示属性是否必填。

这是通过检查属性是否与当前 $scenario 中的 required 验证规则相关联来确定的。

请注意,当验证器使用 $when 应用条件验证时,此方法将返回 false,而不管 when 条件是什么,因为它可能在模型加载数据之前被调用。

public 布尔型 isAttributeRequired ( $attribute )
$attribute string

属性名

返回值 boolean

属性是否必填

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

            
isAttributeSafe() 公共方法

定义于: yii\base\Model::isAttributeSafe()

返回一个值,指示属性是否安全用于批量赋值。

另请参阅 safeAttributes()

public 布尔型 isAttributeSafe ( $attribute )
$attribute string

属性名

返回值 boolean

属性是否安全用于批量赋值

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

            
isPrimaryKey() 公共静态方法

返回一个值,指示给定的属性集是否表示此模型的主键。

public static 布尔型 isPrimaryKey ( $keys )
$keys array

要检查的属性集

返回值 boolean

给定的属性集是否代表此模型的主键

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

            
isRelationPopulated() 公共方法

检查命名关系是否已填充记录。

另请参阅 getRelation()

public 布尔型 isRelationPopulated ( $name )
$name string

关系名称,例如 orders 用于通过 getOrders() 方法定义的关系(区分大小写)。

返回值 boolean

关系是否已填充记录。

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

            
link() 公共方法

建立两个模型之间的关系。

通过将一个模型中的外键值设置为另一个模型中对应的主键值来建立关系。具有外键的模型将保存到数据库中,**不会**执行验证,并且**不会**触发事件/行为。

如果关系涉及联接表,则会在联接表中插入新行,其中包含两个模型的主键值。

请注意,此方法要求主键值不为空。

public void link ( $name, $model, $extraColumns = [] )
$name string

关系的区分大小写的名称,例如,对于通过 getOrders() 方法定义的关系,使用 orders

$model yii\db\ActiveRecordInterface

要与当前模型关联的模型。

$extraColumns array

要保存到联接表的其他列值。此参数仅对涉及联接表的关系有意义(即,使用 yii\db\ActiveRelationTrait::via()yii\db\ActiveQuery::viaTable() 设置的关系)。

抛出异常 yii\base\InvalidCallException

如果方法无法关联两个模型。

load() 公共方法

定义于: yii\base\Model::load()

使用输入数据填充模型。

此方法提供了一个方便的快捷方式,用于

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

使用 load() 可以写成

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

load() 从模型的 formName() 方法(您可以覆盖此方法)获取 'FormName',除非提供了 $formName 参数。如果表单名称为空,load() 将使用整个 $data 填充模型,而不是 $data['FormName']

请注意,被填充的数据会受到 setAttributes() 的安全检查。

public 布尔型 load ( $data, $formName null )
$data array

要加载的数据数组,通常为 $_POST$_GET

$formName 字符串|

用于将数据加载到模型的表单名称,表单未使用时为空字符串。如果未设置,则使用 formName()

返回值 boolean

load() 是否在 $data 中找到预期的表单。

                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() 公共静态方法

定义于: yii\base\Model::loadMultiple()

使用来自最终用户的数据填充一组模型。

此方法主要用于收集表格数据输入。每个模型要加载的数据是 $data[formName][index],其中 formName 指的是 formName() 的值,index$models 数组中模型的索引。如果 formName() 为空,则 $data[index] 将用于填充每个模型。填充到每个模型的数据会受到 setAttributes() 的安全检查。

public static 布尔型 loadMultiple ( $models, $data, $formName null )
$models array

要填充的模型。请注意,所有模型都应具有相同的类。

$data array

数据数组。这通常是 $_POST$_GET,但也可能是最终用户提供的任何有效数组。

$formName 字符串|

用于将数据加载到模型的表单名称。如果未设置,它将使用 $models 中第一个模型的 formName() 值。此参数自 2.0.1 版本起可用。

返回值 boolean

是否至少有一个模型成功填充。

                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() 公共方法 (自 2.0.50 版本起可用)

急切加载已加载的主模型的相关模型。

如果某些相关模型仅在满足特定条件时才会使用,则有助于减少对数据库执行的查询次数。例如

$customer = Customer::find()->where(['id' => 123])->one();
if (Yii:app()->getUser()->getIdentity()->canAccessOrders()) {
    $customer->loadRelations('orders.items');
}
public void loadRelations ( $relationNames, $asArray false )
$relationNames 字符串|数组

要从数据库加载的此模型关系的名称。有关如何指定此参数,请参阅 yii\db\ActiveQueryInterface::with()

$asArray boolean

是否将每个关系加载为数组或对象(如果关系本身未指定)。

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

            
loadRelationsFor() 公共静态方法(自版本 2.0.50 起可用)

急切加载已加载的主模型的相关模型。

如果某些相关模型仅在满足特定条件时才会使用,则有助于减少对数据库执行的查询次数。例如

$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 数组|yii\db\ActiveRecordInterface[]

主模型数组。每个模型都应具有相同的类型,并且可以是

$relationNames 字符串|数组

要从数据库加载的主模型关系的名称。有关如何指定此参数,请参阅 yii\db\ActiveQueryInterface::with()

$asArray boolean

是否将每个相关模型加载为数组或对象(如果关系本身未指定)。

                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() 公共方法

标记属性为脏数据。

即使没有对记录进行任何更改,也可以调用此方法来强制更新调用 update() 时的记录。

public void markAttributeDirty ( $name )
$name string

属性名称

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

            
off() 公共方法

定义于: yii\base\Component::off()

从该组件分离现有的事件处理程序。

此方法与 on() 相反。

注意:如果为事件名称传递通配符模式,则只会删除使用此通配符注册的处理程序,而使用与该通配符匹配的普通名称注册的处理程序将保留。

另请参阅 on()

public 布尔值 off ( $name, $handler null )
$name string

事件名称

$handler 可调用|

要删除的事件处理程序。如果它是 null,则将删除附加到命名事件的所有处理程序。

返回值 boolean

如果找到并分离了处理程序

                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() 公共方法

返回指定偏移量处是否存在元素。

此方法是接口 ArrayAccess 所必需的。

public 布尔值 offsetExists ( $offset )
$offset mixed

要检查的偏移量

返回值 boolean

指定偏移量处是否存在元素。

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

            
offsetGet() 公共方法

定义于: yii\base\Model::offsetGet()

返回指定偏移量处的元素。

此方法是 SPL 接口 ArrayAccess 所必需的。当您使用类似 $value = $model[$offset]; 的内容时,会隐式调用它。

public 混合 offsetGet ( $offset )
$offset string

要检索元素的偏移量。

返回值 mixed

偏移量处的元素,如果在偏移量处未找到元素,则为 null

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

            
offsetSet() 公共方法

定义于: yii\base\Model::offsetSet()

设置指定偏移量处的元素。

此方法是 SPL 接口 ArrayAccess 所必需的。当您使用类似 $model[$offset] = $value; 的内容时,会隐式调用它。

public void offsetSet ( $offset, $value )
$offset string

要设置元素的偏移量

$value mixed

元素值

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

            
offsetUnset() 公共方法

将指定偏移量处的元素值设置为null。

此方法是 SPL 接口 ArrayAccess 所必需的。当您使用类似 unset($model[$offset]) 的内容时,会隐式调用它。

public void offsetUnset ( $offset )
$offset mixed

要取消设置元素的偏移量

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

            
on() 公共方法

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是有效的 PHP 回调。以下是一些示例

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

事件处理程序必须使用以下签名定义,

function ($event)

其中 $event 是一个 yii\base\Event 对象,其中包含与事件关联的参数。

从 2.0.14 开始,您可以将事件名称指定为通配符模式

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

另请参阅 off()

public void on ( $name, $handler, $data null, $append true )
$name string

事件名称

$handler 可调用

事件处理程序

$data mixed

触发事件时要传递给事件处理程序的数据。调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。

$append boolean

是否将新的事件处理程序追加到现有处理程序列表的末尾。如果为 false,则新的处理程序将插入到现有处理程序列表的开头。

                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() 公共方法

定义于: yii\base\Model::onUnsafeAttribute()

当批量赋值不安全的属性时,将调用此方法。

默认实现将在 YII_DEBUG 打开时记录警告消息。否则什么也不做。

public void onUnsafeAttribute ( $name, $value )
$name string

不安全的属性名称

$value mixed

属性值

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

            
optimisticLock() 公共方法

返回用于实现乐观锁定的存储锁版本信息的列的名称。

乐观锁允许多个用户访问同一记录进行编辑,并避免潜在的冲突。如果用户尝试在某些过时数据(因为其他用户修改了数据)的基础上保存记录,则会抛出 yii\db\StaleObjectException 异常,并且更新或删除操作将被跳过。

乐观锁仅受 update()delete() 支持。

要使用乐观锁

  1. 创建一个列来存储每一行的版本号。列类型应为 BIGINT DEFAULT 0。覆盖此方法以返回此列的名称。
  2. 确保在任何更新或删除操作之前将版本值提交并加载到您的模型中。或者将 OptimisticLockBehavior 添加到您的模型类中以自动执行此过程。
  3. 在收集用户输入的 Web 表单中,添加一个隐藏字段,用于存储正在更新的记录的锁版本。
  4. 在执行数据更新的控制器操作中,尝试捕获 yii\db\StaleObjectException 并实现必要的业务逻辑(例如合并更改、提示过时数据)以解决冲突。
public string|null optimisticLock ( )
返回值 字符串|

存储表行锁版本的列名。如果返回 null(默认实现),则不支持乐观锁。

                public function optimisticLock()
{
    return null;
}

            
populateRecord() 公共静态方法

使用来自数据库/存储的一行数据填充活动记录对象。

这是一个内部方法,用于在从数据库中获取数据后创建活动记录对象。它主要由 yii\db\ActiveQuery 用于将查询结果填充到活动记录中。

当手动调用此方法时,您应该在创建的记录上调用 afterFind() 以触发 afterFind 事件

public static void populateRecord ( $record, $row )
$record yii\db\BaseActiveRecord

要填充的记录。在大多数情况下,这将是之前由 instantiate() 创建的实例。

$row array

属性值(名称 => 值)

                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() 公共方法

使用相关记录填充命名关系。

请注意,此方法不会检查关系是否存在。

另请参阅 getRelation()

public void populateRelation ( $name, $records )
$name string

关系名称,例如 orders 用于通过 getOrders() 方法定义的关系(区分大小写)。

$records yii\db\ActiveRecordInterface|array|null

要填充到关系中的相关记录。

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

            
primaryKey() 公共抽象静态方法

定义于: yii\db\ActiveRecordInterface::primaryKey()

返回此AR类的主键**名称**。

请注意,即使记录只有一个主键,也应该返回一个数组。

有关主键的**值**,请改用 getPrimaryKey()

public abstract static string[] primaryKey ( )
返回值 string[]

此 AR 类的主键名称。

                public static function primaryKey();

            
refresh() 公共方法

使用最新数据重新填充此活动记录。

如果刷新成功,则会触发 EVENT_AFTER_REFRESH 事件。此事件从 2.0.8 版本开始可用。

public boolean refresh ( )
返回值 boolean

该行是否仍然存在于数据库中。如果为 true,则最新数据将填充到此活动记录中。否则,此记录将保持不变。

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

            
refreshInternal() 受保护方法(从 2.0.13 版本开始可用)

使用新获取的实例重新填充此活动记录的最新数据。

另请参见 refresh()

protected boolean refreshInternal ( $record )
$record yii\db\BaseActiveRecord

要从中获取属性的记录。

返回值 boolean

刷新是否成功。

                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() 受保护方法

定义于: yii\base\ArrayableTrait::resolveFields()

确定哪些字段可以由toArray()返回。

此方法将首先从给定的字段中提取根字段。然后,它将根据 fields()extraFields() 中声明的字段检查请求的根字段,以确定可以返回哪些字段。

protected array resolveFields ( array $fields, array $expand )
$fields array

正在请求用于导出的字段

$expand array

正在请求用于导出的其他字段

返回值 array

要导出的字段列表。数组键是字段名,数组值是相应的对象属性名或返回字段值的 PHP 可调用对象。

                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() 公共方法

定义于: yii\base\Model::rules()

返回属性的验证规则。

验证规则由 validate() 用于检查属性值是否有效。子类可以覆盖此方法以声明不同的验证规则。

每个规则都是一个数组,具有以下结构

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

其中

  • 属性列表:必需,指定要验证的属性数组,对于单个属性,您可以传递一个字符串;
  • 验证器类型:必需,指定要使用的验证器。它可以是内置验证器名称、模型类的使用方法、匿名函数或验证器类名。
  • on:可选,指定 场景 数组,其中可以应用验证规则。如果未设置此选项,则规则将应用于所有场景。
  • 可以指定其他名称-值对以初始化相应的验证器属性。有关可能的属性,请参阅各个验证器类的 API。

验证器可以是扩展 yii\validators\Validator 的类的对象,也可以是模型类方法(称为内联验证器),其签名如下

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

在上面的 $attribute 中,指的是当前正在验证的属性,而 $params 包含一个验证器配置选项数组,例如在 string 验证器的情况下为 max。当前正在验证的属性的值可以通过 $this->$attribute 访问。请注意 $attribute 之前;这是获取变量 $attribute 的值并将其用作属性名称以进行访问。

Yii 还提供了一组 内置验证器。每个验证器都有一个别名,可以在指定验证规则时使用。

以下是一些示例

[
    // 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'],
];

注意,为了继承父类中定义的规则,子类需要使用诸如 array_merge() 之类的函数将父规则与子规则合并。

另请参见 scenarios()

public array rules ( )
返回值 array

验证规则

                public function rules()
{
    return [];
}

            
safeAttributes() 公共方法

定义于: yii\base\Model::safeAttributes()

返回在当前场景中安全用于批量赋值的属性名称。

public string[] safeAttributes ( )
返回值 string[]

安全属性名称

                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() 公共方法

保存当前记录。

此方法将在 $isNewRecordtrue 时调用 insert(),或者在 $isNewRecordfalse 时调用 update()

例如,保存客户记录

$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

是否在保存记录之前执行验证(调用 validate())。默认为 true。如果验证失败,则不会将记录保存到数据库,并且此方法将返回 false

$attributeNames array|null

需要保存的属性名称列表。默认为 null,这意味着将保存从数据库加载的所有属性。

返回值 boolean

保存是否成功(即没有发生验证错误)。

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

            
scenarios() 公共方法

定义于: yii\base\Model::scenarios()

返回场景列表和相应的活动属性。

活动属性是在当前场景中需要进行验证的属性。返回的数组应具有以下格式

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

默认情况下,活动属性被认为是安全的,可以进行批量赋值。如果某个属性不应该进行批量赋值(因此被认为是不安全的),请在属性前添加感叹号(例如 '!rank')。

此方法的默认实现将返回在 rules() 声明中找到的所有场景。名为 SCENARIO_DEFAULT 的特殊场景将包含在 rules() 中找到的所有属性。每个场景都将与受应用于该场景的验证规则验证的属性相关联。

public array scenarios ( )
返回值 array

场景列表以及相应的活动属性。

                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() 公共方法

设置命名属性值。

另请参阅 hasAttribute()

public void setAttribute ( $name, $value )
$name string

属性名称

$value mixed

属性值。

抛出异常 yii\base\InvalidArgumentException

如果指定的属性不存在。

                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() 公共方法

定义于: yii\base\Model::setAttributes()

以批量方式设置属性值。

另请参见

public void setAttributes ( $values, $safeOnly true )
$values array

要分配给模型的属性值(名称 => 值)。

$safeOnly boolean

赋值是否仅应针对安全属性进行。安全属性是与当前 $scenario 中的验证规则相关联的属性。

                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() 公共方法

设置指示记录是否为新记录的值。

另请参阅 getIsNewRecord()

public void setIsNewRecord ( $value )
$value boolean

记录是否为新记录,在调用 save() 时应插入。

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

            
setOldAttribute() 公共方法

设置命名属性的旧值。

另请参阅 hasAttribute()

public void setOldAttribute ( $name, $value )
$name string

属性名称

$value mixed

旧属性值。

抛出异常 yii\base\InvalidArgumentException

如果指定的属性不存在。

                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 void setOldAttributes ( $values )
$values array|null

要设置的旧属性值。如果设置为 null,则此记录被视为 新的

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

            
setScenario() 公共方法

定义于: yii\base\Model::setScenario()

设置模型的场景。

请注意,此方法不会检查场景是否存在。方法 validate() 将执行此检查。

public void setScenario ( $value )
$value string

此模型所在的场景。

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

            
toArray() 公共方法

定义于: yii\base\ArrayableTrait::toArray()

将模型转换为数组。

此方法将首先通过调用 resolveFields() 来识别要包含在结果数组中的字段。然后,它会将模型转换为包含这些字段的数组。如果 $recursive 为 true,则任何嵌入对象也将转换为数组。当嵌入对象为 yii\base\Arrayable 时,其各自的嵌套字段将被提取并传递给 toArray()

如果模型实现了 yii\web\Linkable 接口,则结果数组还将具有一个 _link 元素,该元素引用接口指定的链接列表。

public array toArray ( array $fields = [], array $expand [], $recursive true )
$fields array

正在请求的字段。如果为空或包含“*”,则将返回 fields() 指定的所有字段。字段可以嵌套,并用点 (.) 分隔。例如:item.field.sub-field $recursive 必须为 true 才能提取嵌套字段。如果 $recursive 为 false,则仅提取根字段。

$expand array

正在请求的用于导出的其他字段。仅考虑 extraFields() 中声明的字段。Expand 也可以嵌套,并用点 (.) 分隔。例如:item.expand1.expand2 $recursive 必须为 true 才能提取嵌套扩展。如果 $recursive 为 false,则仅提取根扩展。

$recursive boolean

是否递归地返回嵌入对象的数组表示形式。

返回值 array

对象的数组表示形式

                public function toArray(array $fields = [], array $expand = [], $recursive = true)
{
    $data = [];
    foreach ($this->resolveFields($fields, $expand) as $field => $definition) {
        $attribute = is_string($definition) ? $this->$definition : $definition($this, $field);
        if ($recursive) {
            $nestedFields = $this->extractFieldsFor($fields, $field);
            $nestedExpand = $this->extractFieldsFor($expand, $field);
            if ($attribute instanceof Arrayable) {
                $attribute = $attribute->toArray($nestedFields, $nestedExpand);
            } elseif ($attribute instanceof \JsonSerializable) {
                $attribute = $attribute->jsonSerialize();
            } elseif (is_array($attribute)) {
                $attribute = array_map(
                    function ($item) use ($nestedFields, $nestedExpand) {
                        if ($item instanceof Arrayable) {
                            return $item->toArray($nestedFields, $nestedExpand);
                        } elseif ($item instanceof \JsonSerializable) {
                            return $item->jsonSerialize();
                        }
                        return $item;
                    },
                    $attribute
                );
            }
        }
        $data[$field] = $attribute;
    }
    if ($this instanceof Linkable) {
        $data['_links'] = Link::serialize($this->getLinks());
    }
    return $recursive ? ArrayHelper::toArray($data) : $data;
}

            
trigger() 公共方法

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它会调用事件的所有附加处理程序,包括类级别的处理程序。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名称

$event yii\base\Event|null

事件实例。如果未设置,将创建一个默认的 yii\base\Event 对象。

                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() 公共方法

销毁两个模型之间的关系。

如果 $deletetrue,则将删除具有关系外键的模型。否则,外键将设置为 null,并且模型将在不进行验证的情况下保存。

public void unlink ( $name, $model, $delete false )
$name string

关系的区分大小写的名称,例如,对于通过 getOrders() 方法定义的关系,使用 orders

$model yii\db\ActiveRecordInterface

要从当前模型中取消链接的模型。您必须确保该模型确实与当前模型相关联,因为此方法不会检查这一点。

$delete boolean

是否删除包含外键的模型。如果为 false,则模型的外键将设置为 null 并保存。如果为 true,则将删除包含外键的模型。

抛出异常 yii\base\InvalidCallException

如果模型无法取消链接

抛出异常 yii\db\Exception
抛出异常 yii\db\StaleObjectException

unlinkAll() 公共方法

销毁当前模型中的关系。

如果 $deletetrue,则将删除具有关系外键的模型。否则,外键将设置为 null,并且模型将在不进行验证的情况下保存。

请注意,要销毁关系而不删除记录,请确保您的键可以设置为 null

public void unlinkAll ( $name, $delete false )
$name string

关系的区分大小写的名称,例如,对于通过 getOrders() 方法定义的关系,使用 orders

$delete boolean

是否删除包含外键的模型。

请注意,删除将使用 deleteAll() 执行,这不会在相关模型上触发任何事件。如果您需要触发 EVENT_BEFORE_DELETEEVENT_AFTER_DELETE,则需要先 find 模型,然后对每个模型调用 delete()

                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() 公共方法

将此活动记录的更改保存到关联的数据库表中。

此方法按顺序执行以下步骤

  1. $runValidationtrue 时,调用 beforeValidate()。如果 beforeValidate() 返回 false,则将跳过其余步骤;
  2. $runValidationtrue 时,调用 afterValidate()。如果验证失败,则将跳过其余步骤;
  3. 调用 beforeSave()。如果 beforeSave() 返回 false,则将跳过其余步骤;
  4. 将记录保存到数据库中。如果失败,将跳过其余步骤;
  5. 调用 afterSave()

在上述步骤 1、2、3 和 5 中,事件 EVENT_BEFORE_VALIDATEEVENT_AFTER_VALIDATEEVENT_BEFORE_UPDATEEVENT_AFTER_UPDATE 将由相应的方法引发。

只有 已更改的属性值 将保存到数据库中。

例如,要更新客户记录

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

请注意,更新可能不会影响表中的任何行。在这种情况下,此方法将返回 0。因此,您应该使用以下代码来检查 update() 是否成功

if ($customer->update() !== false) {
    // update successful
} else {
    // update failed
}
public integer|false update ( $runValidation true, $attributeNames null )
$runValidation boolean

是否在保存记录之前执行验证(调用 validate())。默认为 true。如果验证失败,则不会将记录保存到数据库,并且此方法将返回 false

$attributeNames array|null

需要保存的属性名称列表。默认为 null,这意味着将保存从数据库加载的所有属性。

返回值 integer|false

受影响的行数,或者如果验证失败或 beforeSave() 停止更新过程则返回 false

抛出异常 yii\db\StaleObjectException

如果启用了 乐观锁 并且要更新的数据已过时。

抛出异常 yii\db\Exception

如果更新失败。

                public function update($runValidation = true, $attributeNames = null)
{
    if ($runValidation && !$this->validate($attributeNames)) {
        return false;
    }
    return $this->updateInternal($attributeNames);
}

            
updateAll() 公共静态方法

使用提供的属性值和条件更新整个表。

例如,将所有状态为 2 的客户的状态更改为 1

Customer::updateAll(['status' => 1], 'status = 2');
public static integer updateAll ( $attributes, $condition '' )
$attributes array

要保存到表中的属性值(名称-值对)

$condition 字符串|数组

将放在 UPDATE SQL 的 WHERE 部分中的条件。请参阅 yii\db\Query::where() 以了解如何指定此参数。

返回值 integer

更新的行数

抛出异常 yii\base\NotSupportedException

如果未重写

                public static function updateAll($attributes, $condition = '')
{
    throw new NotSupportedException(__METHOD__ . ' is not supported.');
}

            
updateAllCounters() 公共静态方法

使用提供的计数器更改和条件更新整个表。

例如,将所有客户的年龄增加 1,

Customer::updateAllCounters(['age' => 1]);
public static integer updateAllCounters ( $counters, $condition '' )
$counters array

要更新的计数器(属性名称 => 增量值)。如果要递减计数器,请使用负值。

$condition 字符串|数组

将放在 UPDATE SQL 的 WHERE 部分中的条件。请参阅 yii\db\Query::where() 以了解如何指定此参数。

返回值 integer

更新的行数

抛出异常 yii\base\NotSupportedException

如果未重写

                public static function updateAllCounters($counters, $condition = '')
{
    throw new NotSupportedException(__METHOD__ . ' is not supported.');
}

            
updateAttributes() 公共方法

更新指定的属性。

当不需要数据验证并且只需要更新一小部分属性时,此方法是 update() 的快捷方式。

您可以将要更新的属性指定为名称列表或名称-值对。如果是后者,则相应的属性值将相应修改。然后,该方法会将指定的属性保存到数据库中。

请注意,此方法**不会**执行数据验证,并且**不会**触发事件。

public integer updateAttributes ( $attributes )
$attributes array

要更新的属性(名称或名称-值对)

返回值 integer

受影响的行数。

                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() 公共方法

更新当前AR对象的 一个或多个计数器列。

请注意,此方法与 updateAllCounters() 的区别在于,它仅保存当前 AR 对象的计数器。

用法示例如下

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

另请参阅 updateAllCounters()

public boolean updateCounters ( $counters )
$counters array

要更新的计数器(属性名称 => 增量值)如果要递减计数器,请使用负值。

返回值 boolean

保存是否成功

                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() 受保护方法

另请参阅 update()

protected integer|false updateInternal ( $attributes null )
$attributes array|null

要更新的属性

返回值 integer|false

受影响的行数,如果 beforeSave() 停止更新过程,则返回 false。

抛出异常 yii\db\StaleObjectException

                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) {
        $values[$lock] = $this->$lock + 1;
        $condition[$lock] = $this->$lock;
    }
    // We do not check the return value of updateAll() because it's possible
    // that the UPDATE statement doesn't change anything and thus returns 0.
    $rows = static::updateAll($values, $condition);
    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] = isset($this->_oldAttributes[$name]) ? $this->_oldAttributes[$name] : null;
        $this->_oldAttributes[$name] = $value;
    }
    $this->afterSave(false, $changedAttributes);
    return $rows;
}

            
validate() 公共方法

定义于: yii\base\Model::validate()

执行数据验证。

此方法执行适用于当前 $scenario 的验证规则。使用以下条件来确定规则当前是否适用

  • 规则必须与当前场景相关的属性相关联;
  • 规则必须对当前场景有效。

此方法将在实际验证之前和之后分别调用 beforeValidate()afterValidate()。如果 beforeValidate() 返回 false,则验证将被取消,并且不会调用 afterValidate()

可以在验证期间通过 getErrors()getFirstErrors()getFirstError() 检索发现的错误。

public boolean validate ( $attributeNames null, $clearErrors true )
$attributeNames string[]|string|null

应验证的属性名称或属性名称列表。如果此参数为空,则表示应验证在适用验证规则中列出的任何属性。

$clearErrors boolean

是否在执行验证之前调用 clearErrors()

返回值 boolean

验证是否成功且没有任何错误。

抛出异常 yii\base\InvalidArgumentException

如果当前场景未知。

                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() 公共静态方法

定义于: yii\base\Model::validateMultiple()

验证多个模型。

此方法将验证每个模型。正在验证的模型可以是相同类型或不同类型的。

public static boolean validateMultiple ( $models, $attributeNames null )
$models array

要验证的模型

$attributeNames array|null

应验证的属性名称列表。如果此参数为空,则表示应验证在适用验证规则中列出的任何属性。

返回值 boolean

所有模型是否有效。如果一个或多个模型存在验证错误,则将返回 false。

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

            

事件详情

隐藏继承属性

EVENT_AFTER_DELETE 类型为 yii\db\Event 的事件

删除记录后触发的事件。

EVENT_AFTER_FIND 类型为 yii\db\Event 的事件

创建记录并使用查询结果填充记录后触发的事件。

EVENT_AFTER_INSERT 类型为 yii\db\AfterSaveEvent 的事件

插入记录后触发的事件。

EVENT_AFTER_REFRESH 类型为 yii\db\Event 的事件 (自版本 2.0.8 起可用)

在记录刷新后触发的事件。

EVENT_AFTER_UPDATE 类型为 yii\db\AfterSaveEvent 的事件

更新记录后触发的事件。

EVENT_BEFORE_DELETE 类型为 yii\base\ModelEvent 的事件

在删除记录之前触发的事件。您可以将 yii\base\ModelEvent::$isValid 设置为 false 以停止删除。

EVENT_BEFORE_INSERT 类型为 yii\base\ModelEvent 的事件

在插入记录之前触发的事件。您可以将 yii\base\ModelEvent::$isValid 设置为 false 以停止插入。

EVENT_BEFORE_UPDATE 类型为 yii\base\ModelEvent 的事件

在更新记录之前触发的事件。您可以将 yii\base\ModelEvent::$isValid 设置为 false 以停止更新。

EVENT_INIT 类型为 yii\db\Event 的事件

通过init()初始化记录时触发的事件。