Spec-Zone.ru › Yii 1.1

CActiveRecord

Пакет system.db.ar
Наследование абстрактный класс CActiveRecord » CModel » CComponent
Реализует ArrayAccess, Traversable, IteratorAggregate
С 1.0
Исходный код framework/db/ar/CActiveRecord.php
CActiveRecord — базовый класс для классов, представляющих реляционные данные.

Он реализует шаблон активной записи, популярную технику отображения объекта-реляционной модели (ORM). Подробную информацию об этом классе можно найти в руководстве.

Общественные свойства

Свойство Тип Описание Определено в
attributes массив Возвращает все значения атрибутов столбцов. CActiveRecord
commandBuilder CDbCommandBuilder Возвращает билдер команд, используемый этим активным записями (AR). CActiveRecord
db CDbConnection стандартное соединение с базой данных для всех классов активных записей. CActiveRecord
dbConnection CDbConnection Возвращает соединение с базой данных, используемое активной записью. CActiveRecord
dbCriteria CDbCriteria Возвращает критерии запроса, связанные с этой моделью. CActiveRecord
errors массив Возвращает ошибки для всех атрибутов или одного атрибута. CModel
isNewRecord boolean Возвращает значение, указывающее, является ли текущая запись новой (её никогда не сохраняли в базе данных) CActiveRecord
iterator CMapIterator Возвращает итератор для обхода атрибутов модели. CModel
metaData CActiveRecordMetaData Возвращает метаданные для этой активной записи. CActiveRecord
oldPrimaryKey смешанный тип Возвращает старое значение первичного ключа. CActiveRecord
primaryKey смешанный тип Возвращает значение первичного ключа. CActiveRecord
safeAttributeNames массив Возвращает имена атрибутов, которые безопасно массово назначать. CModel
scenario строка Возвращает сценарий, в котором используется эта модель. CModel
tableAlias строка Возвращает псевдоним таблицы, который будет использоваться методами поиска. CActiveRecord
tableSchema CDbTableSchema Возвращает метаданные таблицы, к которой принадлежит эта активная запись. CActiveRecord
validatorList CList Возвращает все валидаторы, объявленные в модели. CModel
validators массив Возвращает валидаторы, применимые к текущему сценарию. CModel

Общественные методы

Метод Описание Определено в
__call() Вызывает именованный метод, который не является методом класса. CActiveRecord
__construct() Конструктор. CActiveRecord
__get() Магический метод-геттер PHP. CActiveRecord
__isset() Проверяет, является ли значение свойства null. CActiveRecord
__set() Магический метод-сеттер PHP. CActiveRecord
__sleep() Магический метод PHP sleep. CActiveRecord
__unset() Устанавливает свойство компонента в null. CActiveRecord
addError() Добавляет новую ошибку в указанное свойство. CModel
addErrors() Добавляет список ошибок. CModel
addRelatedRecord() Не вызывать этот метод. Этот метод используется внутри CActiveFinder для заполнения CActiveRecord
afterFindInternal() Вызывает afterFind. CActiveRecord
applyScopes() Применяет области поиска к заданным критериям. CActiveRecord
asa() Возвращает объект поведения с указанным именем. CComponent
attachBehavior() Прикрепляет поведение к этому компоненту. CComponent
attachBehaviors() Прикрепляет список поведений к компоненту. CComponent
attachEventHandler() Прикрепляет обработчик событий к событию. CComponent
attributeLabels() Возвращает метки свойств. CModel
attributeNames() Возвращает список всех имён свойств модели. CActiveRecord
beforeFindInternal() Вызывает beforeFind. CActiveRecord
behaviors() Возвращает список поведений, в соответствии с которыми должна вести себя эта модель. CModel
cache() Устанавливает параметры кэширования запроса. CActiveRecord
canGetProperty() Определяет, можно ли прочитать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
clearErrors() Удаляет ошибки для всех свойств или одного свойства. CModel
count() Находит количество строк, удовлетворяющих заданному условию запроса. CActiveRecord
countByAttributes() Находит количество строк, имеющих заданные значения свойств. CActiveRecord
countBySql() Находит количество строк, используя заданное SQL-выражение. CActiveRecord
createValidators() Создаёт объекты валидаторов на основе спецификаций в rules. CModel
defaultScope() Возвращает имя области поиска по умолчанию, которая должна неявно применяться ко всем запросам для этой модели. CActiveRecord
delete() Удаляет строку, соответствующую этому активному записям. CActiveRecord
deleteAll() Удаляет строки, удовлетворяющие заданному условию. CActiveRecord
deleteAllByAttributes() Удаляет строки, соответствующие заданным значениям свойств. CActiveRecord
deleteByPk() Удаляет строки с указанным первичным ключом. CActiveRecord
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединённое поведение. CComponent
disableBehaviors() Отключает все присоединённые к этому компоненту поведения. CComponent
enableBehavior() Включает присоединённое поведение. CComponent
enableBehaviors() Включает все присоединённые к этому компоненту поведения. CComponent
equals() Сравнивает текущую активную запись с другой. CActiveRecord
evaluateExpression() Оценивает PHP-выражение или обратный вызов в контексте этого компонента. CComponent
exists() Проверяет, существует ли строка, удовлетворяющая заданному условию. CActiveRecord
find() Находит одну активную запись с заданным условием. CActiveRecord
findAll() Находит все активные записи, удовлетворяющие заданному условию. CActiveRecord
findAllByAttributes() Находит все активные записи, имеющие заданные значения свойств. CActiveRecord
findAllByPk() Находит все активные записи с указанными первичными ключами. CActiveRecord
findAllBySql() Находит все активные записи, используя указанное SQL-выражение. CActiveRecord
findByAttributes() Находит одну активную запись, имеющую заданные значения свойств. CActiveRecord
findByPk() Находит одну активную запись с указанным первичным ключом. CActiveRecord
findBySql() Находит одну активную запись с указанным SQL-выражением. CActiveRecord
generateAttributeLabel() Генерирует удобочитаемую метку свойства. CModel
getActiveFinder() При наличии опций 'with' возвращает новый экземпляр активного нахождения. CActiveRecord
getActiveRelation() Возвращает объявленное для этого класса AR именованное отношение. CActiveRecord
getAttribute() Возвращает значение атрибута с указанным именем. CActiveRecord
getAttributeLabel() Возвращает текстовую метку для указанного атрибута. CActiveRecord
getAttributes() Возвращает значения всех атрибутов столбцов. CActiveRecord
getCommandBuilder() Возвращает билдер команд, используемый этой AR. CActiveRecord
getDbConnection() Возвращает подключение к базе данных, используемое активной записью. CActiveRecord
getDbCriteria() Возвращает критерии запроса, связанные с этой моделью. CActiveRecord
getError() Возвращает первую ошибку указанного атрибута. CModel
getErrors() Возвращает ошибки для всех атрибутов или для отдельного атрибута. CModel
getEventHandlers() Возвращает список прикрепленных обработчиков событий для события. CComponent
getIsNewRecord() Возвращает, является ли текущий запис новый (ни разу не сохранялся в базе данных) CActiveRecord
getIterator() Возвращает итератор для обхода атрибутов в модели. CModel
getMetaData() Возвращает метаданные для данного AR. CActiveRecord
getOldPrimaryKey() Возвращает старое значение первичного ключа. CActiveRecord
getPrimaryKey() Возвращает значение первичного ключа. CActiveRecord
getRelated() Возвращает связанную запись(и). CActiveRecord
getSafeAttributeNames() Возвращает имена атрибутов, которые безопасно назначать массово. CModel
getScenario() Возвращает сценарий, в котором используется эта модель. CModel
getTableAlias() Возвращает псевдоним таблицы, который будет использоваться методами поиска. CActiveRecord
getTableSchema() Возвращает метаданные таблицы, к которой принадлежит этот AR. CActiveRecord
getValidatorList() Возвращает все валидаторы, объявленные в модели. CModel
getValidators() Возвращает валидаторы, применимые к текущему сценарию. CModel
hasAttribute() Проверяет, имеет ли этот AR атрибут с указанным именем. CActiveRecord
hasErrors() Возвращает значение, указывающее, есть ли ошибки валидации. CModel
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли для события с указанным именем прикрепленные обработчики. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
hasRelated() Возвращает значение, указывающее, загружены ли связанные объекты. CActiveRecord
init() Инициализирует эту модель. CActiveRecord
insert() Вставляет строку в таблицу на основе атрибутов этого активного объекта. CActiveRecord
isAttributeRequired() Возвращает значение, указывающее, является ли атрибут обязательным. CModel
isAttributeSafe() Возвращает значение, указывающее, безопасно ли назначение атрибута массово. CModel
model() Возвращает статическую модель указанного класса AR. CActiveRecord
offsetExists() Возвращает, существует ли элемент по указанному смещению. CActiveRecord
offsetGet() Возвращает элемент по указанному смещению. CModel
offsetSet() Устанавливает элемент по указанному смещению. CModel
offsetUnset() Удаляет элемент по указанному смещению. CModel
onAfterConstruct() Это событие срабатывает после создания экземпляра модели оператором new. CModel
onAfterDelete() Это событие срабатывает после удаления записи. CActiveRecord
onAfterFind() Это событие срабатывает после создания записи методом поиска. CActiveRecord
onAfterSave() Это событие срабатывает после сохранения записи. CActiveRecord
onAfterValidate() Это событие срабатывает после выполнения валидации. CModel
onBeforeCount() Это событие срабатывает перед выполнением подсчета AR-поиска. CActiveRecord
onBeforeDelete() Это событие срабатывает перед удалением записи. CActiveRecord
onBeforeFind() Это событие срабатывает перед выполнением поиска AR-поиска. CActiveRecord
onBeforeSave() Это событие срабатывает перед сохранением записи. CActiveRecord
onBeforeValidate() Это событие срабатывает перед выполнением валидации. CModel
onUnsafeAttribute() Этот метод вызывается, когда происходит массовое назначение небезопасного атрибута. CModel
populateRecord() Создает активную запись с заданными атрибутами. CActiveRecord
populateRecords() Создает список активных записей на основе входных данных. CActiveRecord
primaryKey() Возвращает первичный ключ связанной таблицы базы данных. CActiveRecord
raiseEvent() Вызывает событие. CComponent
refresh() Перезаполняет этот активный объект последними данными. CActiveRecord
refreshMetaData() Обновляет метаданные для данного класса AR. CActiveRecord
relations() Этот метод следует переопределить, чтобы объявить связанные объекты. CActiveRecord
resetScope() Сбрасывает все примененные области и критерии. CActiveRecord
rules() Возвращает правила валидации для атрибутов. CModel
save() Сохраняет текущую запись. CActiveRecord
saveAttributes() Сохраняет выбранный список атрибутов. CActiveRecord
saveCounters() Сохраняет один или несколько счетчиков столбцов для текущего объекта AR. CActiveRecord
scopes() Возвращает объявление именованных областей. CActiveRecord
setAttribute() Устанавливает значение атрибута с указанным именем. CActiveRecord
setAttributes() Устанавливает значения атрибутов массовым способом. CModel
setDbCriteria() Устанавливает критерии запроса для текущей модели. CActiveRecord
setIsNewRecord() Устанавливает, является ли запись новой. CActiveRecord
setOldPrimaryKey() Устанавливает старое значение первичного ключа. CActiveRecord
setPrimaryKey() Устанавливает значение первичного ключа. CActiveRecord
setScenario() Устанавливает сценарий для модели. CModel
setTableAlias() Устанавливает псевдоним таблицы для использования в запросах. CActiveRecord
tableName() Возвращает имя связанной таблицы базы данных. CActiveRecord
together() Устанавливает свойство CDbCriteria::together в значение true. CActiveRecord
unsetAttributes() Устанавливает атрибуты в значение null. CModel
update() Обновляет строку, представленную этим активным записями. CActiveRecord
updateAll() Обновляет записи с указанным условием. CActiveRecord
updateByPk() Обновляет записи с указанным(и) первичным(и) ключом(ами). CActiveRecord
updateCounters() Обновляет один или несколько счётчиков столбцов. CActiveRecord
validate() Выполняет валидацию. CModel
with() Указывает, какие связанные объекты должны быть загружены с жадной загрузкой. CActiveRecord

Защищенные методы

Метод Описание Определено
afterConstruct() Этот метод вызывается после создания экземпляра модели оператором new. CModel
afterDelete() Этот метод вызывается после удаления записи. CActiveRecord
afterFind() Этот метод вызывается после создания каждой записи методом поиска. CActiveRecord
afterSave() Этот метод вызывается после успешного сохранения записи. CActiveRecord
afterValidate() Этот метод вызывается после завершения валидации. CModel
beforeCount() Этот метод вызывается перед выполнением подсчёта AR-поиском. CActiveRecord
beforeDelete() Этот метод вызывается перед удалением записи. CActiveRecord
beforeFind() Этот метод вызывается перед выполнением поиска AR-поиском. CActiveRecord
beforeSave() Этот метод вызывается перед сохранением записи (после валидации, если она есть). CActiveRecord
beforeValidate() Этот метод вызывается перед началом валидации. CModel
instantiate() Создаёт экземпляр активной записи. CActiveRecord
query() Выполняет фактический запрос к БД и заполняет объекты AR результатом запроса. CActiveRecord

События

Событие Описание Определено
onBeforeSave Это событие срабатывает перед сохранением записи. CActiveRecord
onAfterSave Это событие срабатывает после сохранения записи. CActiveRecord
onBeforeDelete Это событие срабатывает перед удалением записи. CActiveRecord
onAfterDelete Это событие срабатывает после удаления записи. CActiveRecord
onBeforeFind Это событие срабатывает перед выполнением поиска AR-поиском. CActiveRecord
onAfterFind Это событие срабатывает после создания записи методом поиска. CActiveRecord
onBeforeCount Это событие срабатывает перед выполнением подсчёта AR-поиском. CActiveRecord
onAfterConstruct Это событие срабатывает после создания экземпляра модели оператором new. CModel
onBeforeValidate Это событие срабатывает перед выполнением валидации. CModel
onAfterValidate Это событие срабатывает после выполнения валидации. CModel
onUnsafeAttribute Этот метод вызывается, когда происходит массовое присвоение небезопасных атрибутов. CModel

Подробности свойств

attributes свойство

public array getAttributes(mixed $names=true)
public void setAttributes(array $values, boolean $safeOnly=true)

Возвращает значения всех атрибутов столбцов. Обратите внимание, связанные объекты не возвращаются.

commandBuilder свойство только для чтения

public CDbCommandBuilder getCommandBuilder()

Возвращает используемый этим AR конструктор команд.

db свойство

public static CDbConnection $db;

стандартное подключение к базе данных для всех классов активных записей. По умолчанию это компонент приложения 'db'.

См. также

  • getDbConnection

dbConnection свойство только для чтения

public CDbConnection getDbConnection()

Возвращает подключение к базе данных, используемое активной записью. По умолчанию в качестве подключения к базе данных используется компонент приложения "db". Вы можете переопределить этот метод, если хотите использовать другое подключение к базе данных.

dbCriteria свойство

public CDbCriteria getDbCriteria(boolean $createIfNull=true)
public void setDbCriteria(CDbCriteria $criteria)

Возвращает критерии запроса, связанные с этой моделью.

isNewRecord свойство

public boolean getIsNewRecord()
public void setIsNewRecord(boolean $value)

Возвращает, является ли текущая запись новой (её никогда не сохраняли в базе данных)

metaData свойство только для чтения

public CActiveRecordMetaData getMetaData()

Возвращает метаданные для этого AR

oldPrimaryKey свойство (доступно начиная с версии v1.1.0)

public mixed getOldPrimaryKey()
public void setOldPrimaryKey(mixed $value)

Возвращает старое значение первичного ключа. Это значение первичного ключа, которое заполняется в запись после выполнения метода поиска (например, find(), findAll()). Значение остаётся неизменным, даже если атрибут первичного ключа вручную назначен с другим значением.

primaryKey свойство

public mixed getPrimaryKey()
public void setPrimaryKey(mixed $value)

Возвращает значение первичного ключа.

tableAlias свойство (доступно начиная с v1.1.1)

public string getTableAlias(boolean $quote=false, boolean $checkScopes=true)
public void setTableAlias(string $alias)

Возвращает псевдоним таблицы, который будет использоваться методами поиска. В реляционных запросах возвращаемый псевдоним таблицы может изменяться в зависимости от объявления соответствующего отношения. Кроме того, значение псевдонима таблицы, заданное по умолчанию методом setTableAlias, может быть переопределено применёнными scope'ами.

tableSchema свойство только для чтения

public CDbTableSchema getTableSchema()

Возвращает метаданные таблицы, к которой относится этот AR

Подробности методов

__call() метод

public mixed __call(string $name, array $parameters)
$name строка имя метода
$parameters массив параметры метода
{return} смешанное значение возвращаемого метода
Исходный код: framework/db/ar/CActiveRecord.php#212 (показать)
public function __call($name,$parameters)
{
    if(isset(
$this->getMetaData()->relations[$name]))
    {
        if(empty(
$parameters))
            return 
$this->getRelated($name,false);
        else
            return 
$this->getRelated($name,false,$parameters[0]);
    }

    
$scopes=$this->scopes();
    if(isset(
$scopes[$name]))
    {
        
$this->getDbCriteria()->mergeWith($scopes[$name]);
        return 
$this;
    }

    return 
parent::__call($name,$parameters);
}

Вызывает именованный метод, который не является методом класса. Не вызывайте этот метод. Это магический метод PHP, который мы переопределяем для реализации функциональности именованных scope'ов.

__construct() метод

public void __construct(string $scenario='insert')
$scenario строка имя сценария. См. CModel::scenario для получения более подробной информации об этом параметре. Примечание: для настройки начальных параметров модели используйте init() или afterConstruct(). НЕ переопределяйте конструктор, если это не абсолютно необходимо!
Исходный код: framework/db/ar/CActiveRecord.php#72 (показать)
public function __construct($scenario='insert')
{
    if(
$scenario===null) // internally used by populateRecord() and model()
        
return;

    
$this->setScenario($scenario);
    
$this->setIsNewRecord(true);
    
$this->_attributes=$this->getMetaData()->attributeDefaults;

    
$this->init();

    
$this->attachBehaviors($this->behaviors());
    
$this->afterConstruct();
}

Конструктор.

__get() метод

public mixed __get(string $name)
$name строка имя свойства
{return} смешанный тип значение свойства
Исходный код: framework/db/ar/CActiveRecord.php#134 (показать)
public function __get($name)
{
    if(isset(
$this->_attributes[$name]))
        return 
$this->_attributes[$name];
    elseif(isset(
$this->getMetaData()->columns[$name]))
        return 
null;
    elseif(isset(
$this->_related[$name]))
        return 
$this->_related[$name];
    elseif(isset(
$this->getMetaData()->relations[$name]))
        return 
$this->getRelated($name);
    else
        return 
parent::__get($name);
}

Магический метод PHP getter. Этот метод переопределен, чтобы атрибуты AR можно было получать как свойства.

См. также

  • getAttribute

__isset() метод

public boolean __isset(string $name)
$name строка имя свойства или имя события
{return} булево является ли значение свойства null
Исходный код: framework/db/ar/CActiveRecord.php#173 (показать)
public function __isset($name)
{
    if(isset(
$this->_attributes[$name]))
        return 
true;
    elseif(isset(
$this->getMetaData()->columns[$name]))
        return 
false;
    elseif(isset(
$this->_related[$name]))
        return 
true;
    elseif(isset(
$this->getMetaData()->relations[$name]))
        return 
$this->getRelated($name)!==null;
    else
        return 
parent::__isset($name);
}

Проверяет, является ли значение свойства null. Этот метод переопределяет реализацию родительского класса, проверяя, является ли указанный атрибут null или нет.

__set() метод

public void __set(string $name, mixed $value)
$name строка имя свойства
$value смешанный тип значение свойства
Исходный код: framework/db/ar/CActiveRecord.php#155 (показать)
public function __set($name,$value)
{
    if(
$this->setAttribute($name,$value)===false)
    {
        if(isset(
$this->getMetaData()->relations[$name]))
            
$this->_related[$name]=$value;
        else
            
parent::__set($name,$value);
    }
}

Магический метод PHP setter. Этот метод переопределен, чтобы атрибуты AR можно было получать как свойства.

__sleep() метод

public array __sleep()
{return} массив
Исходный код: framework/db/ar/CActiveRecord.php#122 (показать)
public function __sleep()
{
    return 
array_keys((array)$this);
}

Магический метод PHP sleep. Этот метод гарантирует, что ссылка на метаданные модели установлена в null.

__unset() метод

public void __unset(string $name)
$name строка имя свойства или имя события
Исходный код: framework/db/ar/CActiveRecord.php#194 (показать)
public function __unset($name)
{
    if(isset(
$this->getMetaData()->columns[$name]))
        unset(
$this->_attributes[$name]);
    elseif(isset(
$this->getMetaData()->relations[$name]))
        unset(
$this->_related[$name]);
    else
        
parent::__unset($name);
}

Устанавливает свойство компонента в null. Этот метод переопределяет родительскую реализацию, очищая указанное значение атрибута.

addRelatedRecord() метод

public void addRelatedRecord(string $name, mixed $record, mixed $index)
$name строка имя атрибута
$record смешанный тип связанная запись
$index смешанный тип значение индекса в коллекции связанных объектов. Если true, используется индекс с нуля. Если false, это объект HAS_ONE или BELONGS_TO, и индекс не нужен.
Исходный код: framework/db/ar/CActiveRecord.php#732 (показать)
public function addRelatedRecord($name,$record,$index)
{
    if(
$index!==false)
    {
        if(!isset(
$this->_related[$name]))
            
$this->_related[$name]=array();
        if(
$record instanceof CActiveRecord)
        {
            if(
$index===true)
                
$this->_related[$name][]=$record;
            else
                
$this->_related[$name][$index]=$record;
        }
    }
    elseif(!isset(
$this->_related[$name]))
        
$this->_related[$name]=$record;
}

Не вызывайте этот метод. Этот метод используется внутри CActiveFinder для заполнения связанных объектов. Этот метод добавляет связанный объект к этой записи.

afterDelete() метод

protected void afterDelete()
Исходный код: framework/db/ar/CActiveRecord.php#992 (показать)
protected function afterDelete()
{
    if(
$this->hasEventHandler('onAfterDelete'))
        
$this->onAfterDelete(new CEvent($this));
}

Этот метод вызывается после удаления записи. По умолчанию он вызывает событие onAfterDelete. Вы можете переопределить этот метод для выполнения постобработки после удаления записи. Убедитесь, что вы вызываете родительскую реализацию, чтобы событие было вызвано должным образом.

afterFind() метод

protected void afterFind()
Исходный код: framework/db/ar/CActiveRecord.php#1037 (показать)
protected function afterFind()
{
    if(
$this->hasEventHandler('onAfterFind'))
        
$this->onAfterFind(new CEvent($this));
}

Этот метод вызывается после создания каждой записи методом поиска. По умолчанию он вызывает событие onAfterFind. Вы можете переопределить этот метод для выполнения постобработки каждой новой найденной записи. Убедитесь, что вы вызываете родительскую реализацию, чтобы событие было вызвано должным образом.

afterFindInternal() метод

public void afterFindInternal()
Исходный код: framework/db/ar/CActiveRecord.php#1056 (показать)
public function afterFindInternal()
{
    
$this->afterFind();
}

Вызывает afterFind. Этот метод используется внутренне.

afterSave() метод

protected void afterSave()
Исходный код: framework/db/ar/CActiveRecord.php#961 (показать)
protected function afterSave()
{
    if(
$this->hasEventHandler('onAfterSave'))
        
$this->onAfterSave(new CEvent($this));
}

Этот метод вызывается после успешного сохранения записи. По умолчанию он вызывает событие onAfterSave. Вы можете переопределить этот метод для выполнения постобработки после сохранения записи. Убедитесь, что вы вызываете родительскую реализацию, чтобы событие было вызвано должным образом.

applyScopes() метод

public void applyScopes(CDbCriteria &$criteria)
$criteria CDbCriteria критерии запроса. Этот параметр может быть изменён путём слияния с dbCriteria.
Исходный код: framework/db/ar/CActiveRecord.php#1374 (показать)
public function applyScopes(&$criteria)
{
    if(!empty(
$criteria->scopes))
    {
        
$scs=$this->scopes();
        
$c=$this->getDbCriteria();
        foreach((array)
$criteria->scopes as $k=>$v)
        {
            if(
is_integer($k))
            {
                if(
is_string($v))
                {
                    if(isset(
$scs[$v]))
                    {
                        
$c->mergeWith($scs[$v],true);
                        continue;
                    }
                    
$scope=$v;
                    
$params=array();
                }
                elseif(
is_array($v))
                {
                    
$scope=key($v);
                    
$params=current($v);
                }
            }
            elseif(
is_string($k))
            {
                
$scope=$k;
                
$params=$v;
            }

            
call_user_func_array(array($this,$scope),(array)$params);
        }
    }

    if(isset(
$c) || ($c=$this->getDbCriteria(false))!==null)
    {
        
$c->mergeWith($criteria);
        
$criteria=$c;
        
$this->resetScope(false);
    }
}

Применяет области поиска к заданным критериям. Этот метод объединяет dbCriteria с заданным параметром критериев. Затем он сбрасывает dbCriteria в null.

attributeNames() метод

public array attributeNames()
{return} массив список имён атрибутов.
Исходный код: framework/db/ar/CActiveRecord.php#586 (показать)
public function attributeNames()
{
    return 
array_keys($this->getMetaData()->columns);
}

Возвращает список всех имён атрибутов модели. Это вернёт все имена столбцов таблицы, связанной с этим классом AR.

beforeCount() метод (доступен с v1.1.14)

protected void beforeCount()
Исходный код: framework/db/ar/CActiveRecord.php#1025 (показать)
protected function beforeCount()
{
    if(
$this->hasEventHandler('onBeforeCount'))
        
$this->onBeforeCount(new CEvent($this));
}

Этот метод вызывается перед выполнением запроса подсчёта AR-найдером. Вызовы подсчёта включают count и countByAttributes. По умолчанию он вызывает событие onBeforeCount. Если вы переопределите этот метод, убедитесь, что вызываете родительскую реализацию, чтобы событие было вызвано должным образом.

beforeDelete() метод

protected boolean beforeDelete()
{return} булево должна ли запись быть удалена. По умолчанию true.
Исходный код: framework/db/ar/CActiveRecord.php#974 (показать)
protected function beforeDelete()
{
    if(
$this->hasEventHandler('onBeforeDelete'))
    {
        
$event=new CModelEvent($this);
        
$this->onBeforeDelete($event);
        return 
$event->isValid;
    }
    else
        return 
true;
}

Этот метод вызывается перед удалением записи. По умолчанию он вызывает событие onBeforeDelete. Вы можете переопределить этот метод, чтобы выполнить подготовительные действия перед удалением записи. Убедитесь, что вы вызываете родительскую реализацию, чтобы событие было вызвано должным образом.

beforeFind() метод

protected void beforeFind()
Исходный код: framework/db/ar/CActiveRecord.php#1008 (показать)
protected function beforeFind()
{
    if(
$this->hasEventHandler('onBeforeFind'))
    {
        
$event=new CModelEvent($this);
        
$this->onBeforeFind($event);
    }
}

Этот метод вызывается перед тем, как поиск AR выполняет вызов find. Вызовы find включают find, findAll, findByPk, findAllByPk, findByAttributes, findAllByAttributes, findBySql и findAllBySql. По умолчанию вызывается событие onBeforeFind. Если вы переопределяете этот метод, убедитесь, что вызываете родительскую реализацию, чтобы событие было вызвано должным образом. Для получения подробностей о модификации критериев запроса см. событие onBeforeFind.

beforeFindInternal() метод

public void beforeFindInternal()
Исходный код: framework/db/ar/CActiveRecord.php#1047 (показать)
public function beforeFindInternal()
{
    
$this->beforeFind();
}

Вызывает beforeFind. Этот метод используется внутри.

beforeSave() метод

protected boolean beforeSave()
{return} boolean указывает, нужно ли выполнять сохранение. По умолчанию true.
Исходный код: framework/db/ar/CActiveRecord.php#943 (показать)
protected function beforeSave()
{
    if(
$this->hasEventHandler('onBeforeSave'))
    {
        
$event=new CModelEvent($this);
        
$this->onBeforeSave($event);
        return 
$event->isValid;
    }
    else
        return 
true;
}

Этот метод вызывается перед сохранением записи (после валидации, если она есть). По умолчанию вызывается событие onBeforeSave. Вы можете переопределить этот метод, чтобы выполнить подготовительные действия перед сохранением. Используйте isNewRecord, чтобы определить, выполняется вставка или обновление записи. Убедитесь, что вы вызываете родительскую реализацию, чтобы событие было вызвано должным образом.

cache() метод (доступен с версии v1.1.7)

public static cache(integer $duration, CCacheDependency|ICacheDependency $dependency=NULL, integer $queryCount=1)
$duration integer количество секунд, в течение которого результаты запроса могут оставаться валидными в кэше. Если это 0, кэширование отключено.
$dependency CCacheDependency|ICacheDependency зависимость, которая будет использоваться при сохранении результатов запроса в кэше.
$queryCount integer количество SQL-запросов, которые необходимо кэшировать после вызова этого метода. По умолчанию 1, что означает, что следующий SQL-запрос будет кэширован.
{return} static сам экземпляр активной записи.
Исходный код: framework/db/ar/CActiveRecord.php#111 (показать)
public function cache($duration, $dependency=null, $queryCount=1)
{
    
$this->getDbConnection()->cache($duration, $dependency, $queryCount);
    return 
$this;
}

Устанавливает параметры кэширования запросов. Это метод-короткая форма для CDbConnection::cache(). Он изменяет параметр кэширования запросов для экземпляра dbConnection.

count() метод

public string count(mixed $condition='', array $params=array ( ))
$condition mixed условие запроса или критерии.
$params array параметры, которые нужно привязать к SQL-запросу.
{return} string количество строк, удовлетворяющих заданному условию запроса. Примечание: тип string для сохранения максимальной точности.
Исходный код: framework/db/ar/CActiveRecord.php#1600 (показать)
public function count($condition='',$params=array())
{
    
Yii::trace(get_class($this).'.count()','system.db.ar.CActiveRecord');
    
$this->beforeCount();
    
$builder=$this->getCommandBuilder();
    
$criteria=$builder->createCriteria($condition,$params);
    
$this->applyScopes($criteria);

    if(empty(
$criteria->with))
        return 
$builder->createCountCommand($this->getTableSchema(),$criteria)->queryScalar();
    else
    {
        
$finder=$this->getActiveFinder($criteria->with);
        return 
$finder->count($criteria);
    }
}

Находит количество строк, удовлетворяющих заданному условию запроса. См. find() для подробного объяснения $condition и $params.

countByAttributes() метод (доступен с версии v1.1.4)

public string countByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
$attributes array список значений атрибутов (индексированных по именам атрибутов), которым должны соответствовать активные записи. Значение атрибута может быть массивом, который будет использоваться для генерации условия IN.
$condition mixed условие запроса или критерии.
$params array параметры, которые нужно привязать к SQL-запросу.
{return} string количество строк, удовлетворяющих заданному условию запроса. Примечание: тип string для сохранения максимальной точности.
Исходный код: framework/db/ar/CActiveRecord.php#1627 (показать)
public function countByAttributes($attributes,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.countByAttributes()','system.db.ar.CActiveRecord');
    
$prefix=$this->getTableAlias(true).'.';
    
$builder=$this->getCommandBuilder();
    
$this->beforeCount();
    
$criteria=$builder->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params,$prefix);
    
$this->applyScopes($criteria);

    if(empty(
$criteria->with))
        return 
$builder->createCountCommand($this->getTableSchema(),$criteria)->queryScalar();
    else
    {
        
$finder=$this->getActiveFinder($criteria->with);
        return 
$finder->count($criteria);
    }
}

Находит количество строк с указанными значениями атрибутов. См. find() для подробного объяснения $condition и $params.

countBySql() метод

public string countBySql(string $sql, array $params=array ( ))
$sql string SQL-запрос
$params array параметры для привязки к SQL-запросу
{return} string количество строк, использующих данный SQL-запрос. Примечание: тип string для сохранения максимальной точности.
Исходный код: framework/db/ar/CActiveRecord.php#1653 (показать)
public function countBySql($sql,$params=array())
{
    
Yii::trace(get_class($this).'.countBySql()','system.db.ar.CActiveRecord');
    
$this->beforeCount();
    return 
$this->getCommandBuilder()->createSqlCommand($sql,$params)->queryScalar();
}

Находит количество строк, использующих данный SQL-запрос. Эквивалентно вызову CDbCommand::queryScalar с указанным SQL-запросом и параметрами.

defaultScope() метод

public array defaultScope()
{return} array критерии запроса. Будут использованы в качестве параметра конструктору CDbCriteria.
Исходный код: framework/db/ar/CActiveRecord.php#353 (показать)
public function defaultScope()
{
    return array();
}

Возвращает стандартную именованную область видимости, которая должна неявно применяться ко всем запросам для этой модели. Важно: стандартная область видимости применяется только к запросам SELECT. Она игнорируется для запросов INSERT, UPDATE и DELETE. По умолчанию возвращает пустой массив. Вы можете переопределить этот метод, если модели необходимо запросить с некоторыми стандартными критериями (например, должны возвращаться только активные записи).

delete() метод

public boolean delete()
{return} boolean указывает, удалось ли удалить.
Исходный код: framework/db/ar/CActiveRecord.php#1223 (показать)
public function delete()
{
    if(!
$this->getIsNewRecord())
    {
        
Yii::trace(get_class($this).'.delete()','system.db.ar.CActiveRecord');
        if(
$this->beforeDelete())
        {
            
$result=$this->deleteByPk($this->getPrimaryKey())>0;
            
$this->afterDelete();
            return 
$result;
        }
        else
            return 
false;
    }
    else
        throw new 
CDbException(Yii::t('yii','The active record cannot be deleted because it is new.'));
}

Удаляет строку, соответствующую этой активной записи.

deleteAll() метод

public integer deleteAll(mixed $condition='', array $params=array ( ))
$condition mixed условие запроса или критерии.
$params array параметры, которые нужно привязать к SQL-запросу.
{return} integer количество строк, удаленных.
Исходный код: framework/db/ar/CActiveRecord.php#1820 (показать)
public function deleteAll($condition='',$params=array())
{
    
Yii::trace(get_class($this).'.deleteAll()','system.db.ar.CActiveRecord');
    
$builder=$this->getCommandBuilder();
    
$criteria=$builder->createCriteria($condition,$params);
    
$command=$builder->createDeleteCommand($this->getTableSchema(),$criteria);
    return 
$command->execute();
}

Удаляет строки, удовлетворяющие указанному условию. См. find() для подробного объяснения $condition и $params.

deleteAllByAttributes() метод

public integer deleteAllByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
$attributes массив список значений атрибутов (индексированных по именам атрибутов), которым должны соответствовать активные записи. Значение атрибута может быть массивом, который будет использован для генерации условия IN.
$condition смешанный условие или критерии запроса.
$params массив параметры, которые должны быть связаны с SQL-запросом.
{return} целое число количество строк, затронутых выполнением.
Исходный код: framework/db/ar/CActiveRecord.php#1838 (показать)
public function deleteAllByAttributes($attributes,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.deleteAllByAttributes()','system.db.ar.CActiveRecord');
    
$builder=$this->getCommandBuilder();
    
$table=$this->getTableSchema();
    
$criteria=$builder->createColumnCriteria($table,$attributes,$condition,$params);
    
$command=$builder->createDeleteCommand($table,$criteria);
    return 
$command->execute();
}

Удаляет строки, которые соответствуют указанным значениям атрибутов. См. find() для подробного объяснения $condition и $params.

deleteByPk() метод

public integer deleteByPk(mixed $pk, mixed $condition='', array $params=array ( ))
$pk смешанный значение(я) первичного ключа. Используйте массив для нескольких первичных ключей. Для составного ключа каждое значение ключа должно быть массивом (имя столбца=>значение столбца).
$condition смешанный условие или критерии запроса.
$params массив параметры, которые должны быть связаны с SQL-запросом.
{return} целое число количество строк, удаленных.
Исходный код: framework/db/ar/CActiveRecord.php#1804 (показать)
public function deleteByPk($pk,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.deleteByPk()','system.db.ar.CActiveRecord');
    
$builder=$this->getCommandBuilder();
    
$criteria=$builder->createPkCriteria($this->getTableSchema(),$pk,$condition,$params);
    
$command=$builder->createDeleteCommand($this->getTableSchema(),$criteria);
    return 
$command->execute();
}

Удаляет строки с указанным первичным ключом. См. find() для подробного объяснения $condition и $params.

equals() метод

public boolean equals(CActiveRecord $record)
$record CActiveRecord запись для сравнения
{return} логическое являются ли две активные записи ссылкой на одну и ту же строку в таблице базы данных.
Исходный код: framework/db/ar/CActiveRecord.php#1271 (показать)
public function equals($record)
{
    return 
$this->tableName()===$record->tableName() && $this->getPrimaryKey()===$record->getPrimaryKey();
}

Сравнивает текущую активную запись с другой. Сравнение выполняется путем сравнения имени таблицы и значений первичного ключа двух активных записей.

exists() метод

public boolean exists(mixed $condition='', array $params=array ( ))
$condition смешанный условие или критерии запроса.
$params массив параметры, которые должны быть связаны с SQL-запросом.
{return} логическое есть ли строка, удовлетворяющая указанному условию.
Исходный код: framework/db/ar/CActiveRecord.php#1667 (показать)
public function exists($condition='',$params=array())
{
    
Yii::trace(get_class($this).'.exists()','system.db.ar.CActiveRecord');
    
$builder=$this->getCommandBuilder();
    
$criteria=$builder->createCriteria($condition,$params);
    
$table=$this->getTableSchema();
    
$criteria->select='1';
    
$criteria->limit=1;
    
$this->applyScopes($criteria);

    if(empty(
$criteria->with))
        return 
$builder->createFindCommand($table,$criteria,$this->getTableAlias(false, false))->queryRow()!==false;
    else
    {
        
$criteria->select='*';
        
$finder=$this->getActiveFinder($criteria->with);
        return 
$finder->count($criteria)>0;
    }
}

Проверяет, существует ли строка, удовлетворяющая указанному условию. См. find() для подробного объяснения $condition и $params.

find() метод

public static find(mixed $condition='', array $params=array ( ))
$condition смешанный условие или критерии запроса. Если строка, она обрабатывается как условие запроса (часть WHERE); Если массив, он обрабатывается как начальные значения для создания объекта CDbCriteria; В противном случае, это должен быть экземпляр CDbCriteria.
$params массив параметры, которые должны быть связаны с SQL-запросом. Используется только когда первый параметр - строка (условие запроса). В других случаях, пожалуйста, используйте CDbCriteria::params для задания параметров.
{return} статический найденная запись. Null, если запись не найдена.
Исходный код: framework/db/ar/CActiveRecord.php#1460 (показать)
public function find($condition='',$params=array())
{
    
Yii::trace(get_class($this).'.find()','system.db.ar.CActiveRecord');
    
$criteria=$this->getCommandBuilder()->createCriteria($condition,$params);
    return 
$this->query($criteria);
}

Находит единственную активную запись, удовлетворяющую указанному условию.

findAll() метод

public static[] findAll(mixed $condition='', array $params=array ( ))
$condition смешанный условие или критерии запроса.
$params массив параметры, которые должны быть связаны с SQL-запросом.
{return} статический массив список активных записей, удовлетворяющих заданному условию. Если не найдено ни одной, возвращается пустой массив.
Исходный код: framework/db/ar/CActiveRecord.php#1474 (показать)
public function findAll($condition='',$params=array())
{
    
Yii::trace(get_class($this).'.findAll()','system.db.ar.CActiveRecord');
    
$criteria=$this->getCommandBuilder()->createCriteria($condition,$params);
    return 
$this->query($criteria,true);
}

Находит все активные записи, удовлетворяющие указанному условию. См. find() для подробного объяснения $condition и $params.

findAllByAttributes() метод

public static[] findAllByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
$attributes массив список значений атрибутов (индексированных по именам атрибутов), которым должны соответствовать активные записи. Значение атрибута может быть массивом, который будет использован для генерации условия IN.
$condition смешанный условие или критерии запроса.
$params массив параметры, которые должны быть связаны с SQL-запросом.
{return} статический массив найденные записи. Если не найдено ни одной, возвращается пустой массив.
Исходный код: framework/db/ar/CActiveRecord.php#1539 (показать)
public function findAllByAttributes($attributes,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.findAllByAttributes()','system.db.ar.CActiveRecord');
    
$prefix=$this->getTableAlias(true).'.';
    
$criteria=$this->getCommandBuilder()->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params,$prefix);
    return 
$this->query($criteria,true);
}

Находит все активные записи, у которых есть указанные значения атрибутов. См. find() для подробного объяснения $condition и $params.

findAllByPk() метод

public static[] findAllByPk(mixed $pk, mixed $condition='', array $params=array ( ))
$pk смешанный значение(я) первичного ключа. Используйте массив для нескольких первичных ключей. Для составного ключа каждое значение ключа должно быть массивом (имя столбца=>значение столбца).
$condition смешанный условие или критерии запроса.
$params массив параметры, которые должны быть связаны с SQL-запросом.
{return} статический массив найденные записи. Если не найдено ни одной, возвращается пустой массив.
Исходный код: framework/db/ar/CActiveRecord.php#1505 (показать)
public function findAllByPk($pk,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.findAllByPk()','system.db.ar.CActiveRecord');
    
$prefix=$this->getTableAlias(true).'.';
    
$criteria=$this->getCommandBuilder()->createPkCriteria($this->getTableSchema(),$pk,$condition,$params,$prefix);
    return 
$this->query($criteria,true);
}

Находит все активные записи с указанными первичными ключами. См. find() для подробного объяснения $condition и $params.

findAllBySql() метод

public static[] findAllBySql(string $sql, array $params=array ( ))
$sql строка SQL-запрос.
$params массив параметры, которые должны быть связаны с SQL-запросом
{return} статический массив найденные записи. Если не найдено ни одной, возвращается пустой массив.
Исходный код: framework/db/ar/CActiveRecord.php#1576 (показать)
public function findAllBySql($sql,$params=array())
{
    
Yii::trace(get_class($this).'.findAllBySql()','system.db.ar.CActiveRecord');
    
$this->beforeFind();
    if((
$criteria=$this->getDbCriteria(false))!==null && !empty($criteria->with))
    {
        
$this->resetScope(false);
        
$finder=$this->getActiveFinder($criteria->with);
        return 
$finder->findAllBySql($sql,$params);
    }
    else
    {
        
$command=$this->getCommandBuilder()->createSqlCommand($sql,$params);
        return 
$this->populateRecords($command->queryAll());
    }
}

Находит все активные записи с помощью указанного SQL-запроса.

findByAttributes() метод

public static findByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
$attributes array список значений атрибутов (индексированных по именам атрибутов), которым должны соответствовать активные записи. Значение атрибута может быть массивом, который будет использоваться для генерации условия IN.
$condition mixed условие запроса или критерии.
$params array параметры для связывания с SQL-запросом.
{return} static найденная запись. Null, если запись не найдена.
Исходный код: framework/db/ar/CActiveRecord.php#1522 (показать)
public function findByAttributes($attributes,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.findByAttributes()','system.db.ar.CActiveRecord');
    
$prefix=$this->getTableAlias(true).'.';
    
$criteria=$this->getCommandBuilder()->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params,$prefix);
    return 
$this->query($criteria);
}

Находит одну активную запись, значения атрибутов которой соответствуют заданным. Смотрите find() для подробного объяснения $condition и $params.

findByPk() метод

public static findByPk(mixed $pk, mixed $condition='', array $params=array ( ))
$pk mixed значение первичного ключа (ключа). Используйте массив для нескольких первичных ключей. Для составного ключа каждое значение ключа должно быть массивом (имя столбца=>значение столбца).
$condition mixed условие запроса или критерии.
$params array параметры для связывания с SQL-запросом.
{return} static найденная запись. Null, если запись не найдена.
Исходный код: framework/db/ar/CActiveRecord.php#1489 (показать)
public function findByPk($pk,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.findByPk()','system.db.ar.CActiveRecord');
    
$prefix=$this->getTableAlias(true).'.';
    
$criteria=$this->getCommandBuilder()->createPkCriteria($this->getTableSchema(),$pk,$condition,$params,$prefix);
    return 
$this->query($criteria);
}

Находит одну активную запись по заданному первичному ключу. Смотрите find() для подробного объяснения $condition и $params.

findBySql() метод

public static findBySql(string $sql, array $params=array ( ))
$sql string SQL-запрос
$params array параметры для связывания с SQL-запросом
{return} static найденная запись. Null, если запись не найдена.
Исходный код: framework/db/ar/CActiveRecord.php#1553 (показать)
public function findBySql($sql,$params=array())
{
    
Yii::trace(get_class($this).'.findBySql()','system.db.ar.CActiveRecord');
    
$this->beforeFind();
    if((
$criteria=$this->getDbCriteria(false))!==null && !empty($criteria->with))
    {
        
$this->resetScope(false);
        
$finder=$this->getActiveFinder($criteria->with);
        return 
$finder->findBySql($sql,$params);
    }
    else
    {
        
$command=$this->getCommandBuilder()->createSqlCommand($sql,$params);
        return 
$this->populateRecord($command->queryRow());
    }
}

Находит одну активную запись с помощью заданного SQL-запроса.

getActiveFinder() метод (доступен начиная с v1.1.14)

public CActiveFinder getActiveFinder(mixed $with)
$with mixed имена отношений, которые нужно активно искать
{return} CActiveFinder активный поиск для операции
Исходный код: framework/db/ar/CActiveRecord.php#913 (показать)
public function getActiveFinder($with)
{
    return new 
CActiveFinder($this,$with);
}

Возвращает новый экземпляр активного поиска, учитывая опции 'with'.

getActiveRelation() метод

public CActiveRelation getActiveRelation(string $name)
$name string имя отношения
{return} CActiveRelation объявленное отношение для этого класса AR. Null, если отношение не существует.
Исходный код: framework/db/ar/CActiveRecord.php#652 (показать)
public function getActiveRelation($name)
{
    return isset(
$this->getMetaData()->relations[$name]) ? $this->getMetaData()->relations[$name] : null;
}

Возвращает объявленное отношение для данного класса AR.

getAttribute() метод

public mixed getAttribute(string $name)
$name string имя атрибута
{return} mixed значение атрибута. Null, если атрибут не задан или не существует.
Исходный код: framework/db/ar/CActiveRecord.php#696 (показать)
public function getAttribute($name)
{
    if(
property_exists($this,$name))
        return 
$this->$name;
    elseif(isset(
$this->_attributes[$name]))
        return 
$this->_attributes[$name];
}

Возвращает значение заданного атрибута. Если это новая запись, и атрибут не задан, возвращается значение по умолчанию. Если запись является результатом запроса и атрибут не загружен, возвращается null. Также можно использовать $this->AttributeName для получения значения атрибута.

См. также

  • hasAttribute

getAttributeLabel() метод (доступен начиная с v1.1.4)

public string getAttributeLabel(string $attribute)
$attribute string имя атрибута
{return} string метка атрибута
Исходный код: framework/db/ar/CActiveRecord.php#602 (показать)
public function getAttributeLabel($attribute)
{
    
$labels=$this->attributeLabels();
    if(isset(
$labels[$attribute]))
        return 
$labels[$attribute];
    elseif(
strpos($attribute,'.')!==false)
    {
        
$segs=explode('.',$attribute);
        
$name=array_pop($segs);
        
$model=$this;
        foreach(
$segs as $seg)
        {
            
$relations=$model->getMetaData()->relations;
            if(isset(
$relations[$seg]))
                
$model=CActiveRecord::model($relations[$seg]->className);
            else
                break;
        }
        return 
$model->getAttributeLabel($name);
    }
    else
        return 
$this->generateAttributeLabel($attribute);
}

Возвращает текстовую метку для указанного атрибута. Этот метод переопределяет родительскую реализацию, поддерживая возвращение метки, определенной в объекте отношения. В частности, если имя атрибута имеет вид "post.author.name", метод извлечёт метку из атрибута "name" отношения "author".

См. также

  • generateAttributeLabel

getAttributes() метод

public array getAttributes(mixed $names=true)
$names mixed имена атрибутов, значения которых необходимо вернуть. Если true (по умолчанию), возвращаются все значения атрибутов, включая те, которые не загружены из БД (для них возвращается null). Если null, возвращаются все атрибуты, кроме тех, которые не загружены из БД.
{return} array значения атрибутов, индексированные по именам атрибутов.
Исходный код: framework/db/ar/CActiveRecord.php#759 (показать)
public function getAttributes($names=true)
{
    
$attributes=$this->_attributes;
    foreach(
$this->getMetaData()->columns as $name=>$column)
    {
        if(
property_exists($this,$name))
            
$attributes[$name]=$this->$name;
        elseif(
$names===true && !isset($attributes[$name]))
            
$attributes[$name]=null;
    }
    if(
is_array($names))
    {
        
$attrs=array();
        foreach(
$names as $name)
        {
            if(
property_exists($this,$name))
                
$attrs[$name]=$this->$name;
            else
                
$attrs[$name]=isset($attributes[$name])?$attributes[$name]:null;
        }
        return 
$attrs;
    }
    else
        return 
$attributes;
}

Возвращает все значения атрибутов столбцов. Обратите внимание, что связанные объекты не возвращаются.

getCommandBuilder() метод

public CDbCommandBuilder getCommandBuilder()
{return} CDbCommandBuilder строитель команд, используемый этим AR
Исходный код: framework/db/ar/CActiveRecord.php#670 (показать)
public function getCommandBuilder()
{
    return 
$this->getDbConnection()->getSchema()->getCommandBuilder();
}

Возвращает используемый этим AR строитель команд.

getDbConnection() метод

public CDbConnection getDbConnection()
{return} CDbConnection соединение с базой данных, используемое активной записью.
Исходный код: framework/db/ar/CActiveRecord.php#633 (показать)
public function getDbConnection()
{
    if(
self::$db!==null)
        return 
self::$db;
    else
    {
        
self::$db=Yii::app()->getDb();
        if(
self::$db instanceof CDbConnection)
            return 
self::$db;
        else
            throw new 
CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.'));
    }
}

Возвращает подключение к базе данных, используемое активной записью. По умолчанию используется компонент «db» приложения в качестве подключения к базе данных. Можно переопределить этот метод, если необходимо использовать другое подключение к базе данных.

getDbCriteria() метод

public CDbCriteria getDbCriteria(boolean $createIfNull=true)
$createIfNull boolean создавать экземпляр критериев, если он отсутствует. По умолчанию true.
{return} CDbCriteria критерии запроса, связанные с этой моделью. Эти критерии в основном используются в функции именных скопов для накопления различных критериев.
Исходный код: framework/db/ar/CActiveRecord.php#325 (показать)
public function getDbCriteria($createIfNull=true)
{
    if(
$this->_c===null)
    {
        if((
$c=$this->defaultScope())!==array() || $createIfNull)
            
$this->_c=new CDbCriteria($c);
    }
    return 
$this->_c;
}

Возвращает критерии запроса, связанные с этой моделью.

getIsNewRecord() метод

public boolean getIsNewRecord()
{возврат} boolean указывает, является ли запись новой и должна ли она быть вставлена при вызове save. Это свойство автоматически устанавливается в конструкторе и методе populateRecord и устанавливается в false сразу после вставки записи в базу данных. По умолчанию равно false, но будет установлено в true, если экземпляр создан с помощью оператора new.
Исходный код: framework/db/ar/CActiveRecord.php#824 (показать)
public function getIsNewRecord()
{
    return 
$this->_new;
}

Возвращает, является ли текущая запись новой (её никогда не сохраняли в базе данных)

getMetaData() метод

public CActiveRecordMetaData getMetaData()
{возврат} CActiveRecordMetaData метаданные для этого класса AR.
Исходный код: framework/db/ar/CActiveRecord.php#407 (показать)
public function getMetaData()
{
    
$className=get_class($this);
    if(!
array_key_exists($className,self::$_md))
    {
        
self::$_md[$className]=null; // preventing recursive invokes of {@link getMetaData()} via {@link __get()}
        
self::$_md[$className]=new CActiveRecordMetaData($this);
    }
    return 
self::$_md[$className];
}

Возвращает метаданные для этого AR

getOldPrimaryKey() метод (доступен с версии v1.1.0)

public mixed getOldPrimaryKey()
{возврат} mixed старое значение первичного ключа. Возвращается массив (имя столбца => значение столбца), если первичный ключ составной. Если первичный ключ не определён, возвращается null.
Исходный код: framework/db/ar/CActiveRecord.php#1326 (показать)
public function getOldPrimaryKey()
{
    return 
$this->_pk;
}

Возвращает старое значение первичного ключа. Относится к значению первичного ключа, которое заполняется в запись после выполнения метода поиска (например, find(), findAll()). Значение остаётся неизменным, даже если атрибуту первичного ключа вручную присвоено другое значение.

getPrimaryKey() метод

public mixed getPrimaryKey()
{возврат} mixed значение первичного ключа. Возвращается массив (имя столбца => значение столбца), если первичный ключ составной. Если первичный ключ не определён, возвращается null.
Исходный код: framework/db/ar/CActiveRecord.php#1281 (показать)
public function getPrimaryKey()
{
    
$table=$this->getTableSchema();
    if(
is_string($table->primaryKey))
        return 
$this->{$table->primaryKey};
    elseif(
is_array($table->primaryKey))
    {
        
$values=array();
        foreach(
$table->primaryKey as $name)
            
$values[$name]=$this->$name;
        return 
$values;
    }
    else
        return 
null;
}

Возвращает значение первичного ключа.

getRelated() метод

public mixed getRelated(string $name, boolean $refresh=false, mixed $params=array ( ))
$name string имя отношения (см. relations)
$refresh boolean перезагрузить ли связанные объекты из базы данных. По умолчанию false. Если текущая запись не является новой записью и у неё не загружены связанные объекты, они будут извлечены из базы данных, даже если это значение равно false. Если текущая запись является новой, а это значение равно false, связанные объекты не будут извлечены из базы данных.
$params mixed массив или объект CDbCriteria с дополнительными параметрами, которые настраивают условия запроса, как указано в объявлении отношения. Если это значение предоставлено, связанные запись(и) будут извлечены из базы данных независимо от значения или $refresh. Связанные запись(и), извлеченные, когда это значение указано, будут возвращены только этим методом и не будут загружены в отношение текущей записи. Значение отношения до выполнения этого метода по-прежнему будет доступно для текущей записи, если это значение указано.
{возврат} mixed связанный(ые) объект(ы).
Исходный код: framework/db/ar/CActiveRecord.php#252 (показать)
public function getRelated($name,$refresh=false,$params=array())
{
    if(!
$refresh && $params===array() && (isset($this->_related[$name]) || array_key_exists($name,$this->_related)))
        return 
$this->_related[$name];

    
$md=$this->getMetaData();
    if(!isset(
$md->relations[$name]))
        throw new 
CDbException(Yii::t('yii','{class} does not have relation "{name}".',
            array(
'{class}'=>get_class($this), '{name}'=>$name)));

    
Yii::trace('lazy loading '.get_class($this).'.'.$name,'system.db.ar.CActiveRecord');
    
$relation=$md->relations[$name];
    if(
$this->getIsNewRecord() && !$refresh && ($relation instanceof CHasOneRelation || $relation instanceof CHasManyRelation))
        return 
$relation instanceof CHasOneRelation ? null : array();

    if(
$params!==array()) // dynamic query
    
{
        
$exists=isset($this->_related[$name]) || array_key_exists($name,$this->_related);
        if(
$exists)
            
$save=$this->_related[$name];

        if(
$params instanceof CDbCriteria)
            
$params = $params->toArray();

        
$r=array($name=>$params);
    }
    else
        
$r=$name;
    unset(
$this->_related[$name]);

    
$finder=$this->getActiveFinder($r);
    
$finder->lazyFind($this);

    if(!isset(
$this->_related[$name]))
    {
        if(
$relation instanceof CHasManyRelation)
            
$this->_related[$name]=array();
        elseif(
$relation instanceof CStatRelation)
            
$this->_related[$name]=$relation->defaultValue;
        else
            
$this->_related[$name]=null;
    }

    if(
$params!==array())
    {
        
$results=$this->_related[$name];
        if(
$exists)
            
$this->_related[$name]=$save;
        else
            unset(
$this->_related[$name]);
        return 
$results;
    }
    else
        return 
$this->_related[$name];
}

Возвращает связанную(ые) запись(и). Этот метод вернет связанную(ые) запись(и) текущей записи. Если отношение HAS_ONE или BELONGS_TO, вернет один объект или null, если объект не существует. Если отношение HAS_MANY или MANY_MANY, вернет массив объектов или пустой массив.

getTableAlias() метод (доступен с версии v1.1.1)

public string getTableAlias(boolean $quote=false, boolean $checkScopes=true)
$quote boolean цитировать ли имя псевдонима таблицы
$checkScopes boolean проверить, определен ли псевдоним таблицы в примененных до сих пор scopes. Этот параметр должен быть установлен в false при вызове этого метода в defaultScope. В противном случае будет образована бесконечная петля.
{возврат} string стандартный псевдоним таблицы
Исходный код: framework/db/ar/CActiveRecord.php#1430 (показать)
public function getTableAlias($quote=false, $checkScopes=true)
{
    if(
$checkScopes && ($criteria=$this->getDbCriteria(false))!==null && $criteria->alias!='')
        
$alias=$criteria->alias;
    else
        
$alias=$this->_alias;
    return 
$quote ? $this->getDbConnection()->getSchema()->quoteTableName($alias) : $alias;
}

Возвращает псевдоним таблицы, который будет использоваться методами поиска. В реляционных запросах возвращаемый псевдоним таблицы может изменяться в зависимости от соответствующего объявления отношения. Также стандартный псевдоним таблицы, установленный с помощью setTableAlias, может быть переопределен применёнными scopes.

getTableSchema() метод

public CDbTableSchema getTableSchema()
{возврат} CDbTableSchema метаданные таблицы, к которой принадлежит этот AR
Исходный код: framework/db/ar/CActiveRecord.php#661 (показать)
public function getTableSchema()
{
    return 
$this->getMetaData()->tableSchema;
}

Возвращает метаданные таблицы, к которой принадлежит этот AR

hasAttribute() метод

public boolean hasAttribute(string $name)
$name string имя атрибута
{возврат} boolean имеет ли этот AR указанный атрибут (столбец таблицы).
Исходный код: framework/db/ar/CActiveRecord.php#680 (показать)
public function hasAttribute($name)
{
    return isset(
$this->getMetaData()->columns[$name]);
}

Проверяет, есть ли у этого AR указанный атрибут

hasRelated() метод

public boolean hasRelated(string $name)
$name string имя отношения
{возврат} boolean значение, указывающее, загружен ли указанный связанный объект(ы).
Исходный код: framework/db/ar/CActiveRecord.php#313 (показать)
public function hasRelated($name)
{
    return isset(
$this->_related[$name]) || array_key_exists($name,$this->_related);
}

Возвращает значение, указывающее, загружен ли указанный связанный объект(ы).

init() метод

public void init()
Исходный код: framework/db/ar/CActiveRecord.php#94 (показать)
public function init()
{
}

Инициализирует эту модель. Этот метод вызывается, когда экземпляр AR только что создан и его scenario установлен. Вы можете переопределить этот метод, чтобы предоставить код, необходимый для инициализации модели (например, установить начальные значения свойств).

insert() метод

public boolean insert(array $attributes=NULL)
$attributes array список атрибутов, которые нужно сохранить. По умолчанию null, что означает, что все атрибуты, загруженные из БД, будут сохранены.
{возврат} boolean являются ли атрибуты валидными и была ли запись успешно вставлена.
Исходный код: framework/db/ar/CActiveRecord.php#1073 (показать)
public function insert($attributes=null)
{
    if(!
$this->getIsNewRecord())
        throw new 
CDbException(Yii::t('yii','The active record cannot be inserted to database because it is not new.'));
    if(
$this->beforeSave())
    {
        
Yii::trace(get_class($this).'.insert()','system.db.ar.CActiveRecord');
        
$builder=$this->getCommandBuilder();
        
$table=$this->getTableSchema();
        
$command=$builder->createInsertCommand($table,$this->getAttributes($attributes));
        if(
$command->execute())
        {
            
$primaryKey=$table->primaryKey;
            if(
$table->sequenceName!==null)
            {
                if(
is_string($primaryKey) && $this->$primaryKey===null)
                    
$this->$primaryKey=$builder->getLastInsertID($table);
                elseif(
is_array($primaryKey))
                {
                    foreach(
$primaryKey as $pk)
                    {
                        if(
$this->$pk===null)
                        {
                            
$this->$pk=$builder->getLastInsertID($table);
                            break;
                        }
                    }
                }
            }
            
$this->_pk=$this->getPrimaryKey();
            
$this->afterSave();
            
$this->setIsNewRecord(false);
            
$this->setScenario('update');
            return 
true;
        }
    }
    return 
false;
}

Вставляет строку в таблицу на основе атрибутов этого активного объекта. Если первичный ключ таблицы имеет автоматическое наращивание и равен null перед вставкой, он будет заполнен фактическим значением после вставки. Обратите внимание, что валидация не выполняется в этом методе. Вы можете вызвать validate для выполнения валидации. После успешной вставки записи в БД ее свойство isNewRecord будет установлено в false, а свойство scenario — в 'update'.

instantiate() метод

protected static instantiate(array $attributes)
$attributes массив список значений атрибутов для активных записей.
{return} статический активный объект
Исходный код: framework/db/ar/CActiveRecord.php#1916 (показать)
protected function instantiate($attributes)
{
    
$class=get_class($this);
    
$model=new $class(null);
    return 
$model;
}

Создает экземпляр активного объекта. Этот метод вызывается методами populateRecord и populateRecords. Вы можете переопределить этот метод, если экземпляр, который создается, зависит от атрибутов, которые должны быть заполнены в записи. Например, создавая запись на основе значения столбца, вы можете реализовать так называемое отображение наследования по одной таблице.

model() метод

public static static model(string $className='CActiveRecord')
$className строка имя класса активной записи.
{return} статический экземпляр модели активной записи.
Исходный код: framework/db/ar/CActiveRecord.php#391 (показать)
public static function model($className=__CLASS__)
{
    if(isset(
self::$_models[$className]))
        return 
self::$_models[$className];
    else
    {
        
$model=self::$_models[$className]=new $className(null);
        
$model->attachBehaviors($model->behaviors());
        return 
$model;
    }
}

Возвращает статическую модель указанного класса AR. Возвращаемая модель — это статический экземпляр класса AR. Она предназначена для вызова методов класса (нечто подобное статическим методам класса).

КАЖДЫЙ производный класс AR должен переопределить этот метод следующим образом,

public static function model($className=__CLASS__)
{
    return parent::model($className);
}

offsetExists() метод

public boolean offsetExists(mixed $offset)
$offset смешанное смещение для проверки
{return} булево
Исходный код: framework/db/ar/CActiveRecord.php#1929 (показать)
public function offsetExists($offset)
{
    return 
$this->__isset($offset);
}

Возвращает, существует ли элемент по указанному смещению. Этот метод требуется интерфейсом ArrayAccess.

onAfterDelete() метод

public void onAfterDelete(CEvent $event)
$event CEvent параметр события
Исходный код: framework/db/ar/CActiveRecord.php#872 (показать)
public function onAfterDelete($event)
{
    
$this->raiseEvent('onAfterDelete',$event);
}

Это событие срабатывает после удаления записи.

onAfterFind() метод

public void onAfterFind(CEvent $event)
$event CEvent параметр события
Исходный код: framework/db/ar/CActiveRecord.php#900 (показать)
public function onAfterFind($event)
{
    
$this->raiseEvent('onAfterFind',$event);
}

Это событие срабатывает после создания записи методом поиска.

onAfterSave() метод

public void onAfterSave(CEvent $event)
$event CEvent параметр события
Исходный код: framework/db/ar/CActiveRecord.php#853 (показать)
public function onAfterSave($event)
{
    
$this->raiseEvent('onAfterSave',$event);
}

Это событие срабатывает после сохранения записи.

onBeforeCount() метод (доступен с версии v1.1.14)

public void onBeforeCount(CModelEvent $event)
$event CModelEvent параметр события
Исходный код: framework/db/ar/CActiveRecord.php#929 (показать)
public function onBeforeCount($event)
{
    
$this->raiseEvent('onBeforeCount',$event);
}

Это событие срабатывает перед выполнением подсчёта AR-поиском. Если вы хотите получить доступ к критериям запроса, используемым для подсчёта, или изменить их, вы можете использовать getDbCriteria(), чтобы настроить их в соответствии со своими потребностями. При изменении критериев в beforeCount необходимо убедиться, что вы используете правильный псевдоним таблицы, который отличается в обычном подсчёте и при вызове с отношениями. Вы можете использовать getTableAlias(), чтобы получить используемый псевдоним для предстоящего вызова подсчёта.

См. также

  • beforeCount

onBeforeDelete() метод

public void onBeforeDelete(CModelEvent $event)
$event CModelEvent параметр события
Исходный код: framework/db/ar/CActiveRecord.php#863 (показать)
public function onBeforeDelete($event)
{
    
$this->raiseEvent('onBeforeDelete',$event);
}

Это событие срабатывает перед удалением записи. Установив CModelEvent::isValid в false, можно остановить стандартный процесс delete().

onBeforeFind() метод

public void onBeforeFind(CModelEvent $event)
$event CModelEvent параметр события
Исходный код: framework/db/ar/CActiveRecord.php#891 (показать)
public function onBeforeFind($event)
{
    
$this->raiseEvent('onBeforeFind',$event);
}

Это событие срабатывает перед выполнением поиска AR. Это может быть вызов методов поиска CActiveRecords или вызов поиска, когда модель загружается в контексте отношений через ленивую или жадную загрузку. Если вы хотите получить доступ к критериям запроса, используемым для поиска, или изменить их, вы можете использовать getDbCriteria(), чтобы настроить их в соответствии со своими потребностями. При изменении критериев в beforeFind необходимо убедиться, что вы используете правильный псевдоним таблицы, который отличается в обычном поиске и при вызове с отношениями. Вы можете использовать getTableAlias(), чтобы получить используемый псевдоним для предстоящего вызова поиска. Обратите внимание, что изменение критериев полностью поддерживается с версии 1.1.13. В более ранних версиях были некоторые проблемы с контекстом отношений и правильным применением изменений.

См. также

  • beforeFind

onBeforeSave() метод

public void onBeforeSave(CModelEvent $event)
$event CModelEvent параметр события
Исходный код: framework/db/ar/CActiveRecord.php#844 (показать)
public function onBeforeSave($event)
{
    
$this->raiseEvent('onBeforeSave',$event);
}

Это событие срабатывает перед сохранением записи. Установив CModelEvent::isValid в false, можно остановить стандартный процесс save().

populateRecord() метод

public static populateRecord(array $attributes, boolean $callAfterFind=true)
$attributes массив значения атрибутов (имя столбца=>значение столбца)
$callAfterFind булево вызывать ли afterFind после заполнения записи.
{return} статический только что созданная активная запись. Класс объекта совпадает с классом модели. Возвращает Null, если входные данные ложны.
Исходный код: framework/db/ar/CActiveRecord.php#1856 (показать)
public function populateRecord($attributes,$callAfterFind=true)
{
    if(
$attributes!==false)
    {
        
$record=$this->instantiate($attributes);
        
$record->setScenario('update');
        
$record->init();
        
$md=$record->getMetaData();
        foreach(
$attributes as $name=>$value)
        {
            if(
property_exists($record,$name))
                
$record->$name=$value;
            elseif(isset(
$md->columns[$name]))
                
$record->_attributes[$name]=$value;
        }
        
$record->_pk=$record->getPrimaryKey();
        
$record->attachBehaviors($record->behaviors());
        if(
$callAfterFind)
            
$record->afterFind();
        return 
$record;
    }
    else
        return 
null;
}

Создает активную запись с заданными атрибутами. Этот метод используется внутри методами поиска.

populateRecords() метод

public static[] populateRecords(array $data, boolean $callAfterFind=true, string $index=NULL)
$data array список значений атрибутов для активных записей.
$callAfterFind boolean вызывать afterFind после заполнения каждой записи.
$index string имя атрибута, значение которого будет использоваться в качестве индексов массива результатов запроса. Если null, массив индексируется целочисленными значениями, начиная с нуля.
{return} static[] список активных записей.
Исходный код: framework/db/ar/CActiveRecord.php#1890 (показать)
public function populateRecords($data,$callAfterFind=true,$index=null)
{
    
$records=array();
    foreach(
$data as $attributes)
    {
        if((
$record=$this->populateRecord($attributes,$callAfterFind))!==null)
        {
            if(
$index===null)
                
$records[]=$record;
            else
                
$records[$record->$index]=$record;
        }
    }
    return 
$records;
}

Создаёт список активных записей на основе входных данных. Этот метод используется внутренне методами поиска.

primaryKey() метод

public mixed primaryKey()
{return} mixed первичный ключ связанной таблицы базы данных. Если ключ — один столбец, он должен вернуть имя столбца; если ключ составной и состоит из нескольких столбцов, он должен вернуть массив имён столбцов ключа.
Исходный код: framework/db/ar/CActiveRecord.php#457 (показать)
public function primaryKey()
{
}

Возвращает первичный ключ связанной таблицы базы данных. Этот метод предназначен для переопределения в том случае, если таблица не определена с первичным ключом (для некоторых устаревших баз данных). Если таблица уже определена с первичным ключом, переопределять этот метод не нужно. По умолчанию возвращает null, что означает использование первичного ключа, определённого в базе данных.

query() метод (доступен с версии 1.1.7)

protected mixed query(CDbCriteria $criteria, boolean $all=false)
$criteria CDbCriteria критерии запроса
$all boolean возвращать все данные
{return} mixed объекты AR, заполненные результатами запроса
Исходный код: framework/db/ar/CActiveRecord.php#1349 (показать)
protected function query($criteria,$all=false)
{
    
$this->beforeFind();
    
$this->applyScopes($criteria);

    if(empty(
$criteria->with))
    {
        if(!
$all)
            
$criteria->limit=1;
        
$command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria);
        return 
$all ? $this->populateRecords($command->queryAll(), true, $criteria->index) : $this->populateRecord($command->queryRow());
    }
    else
    {
        
$finder=$this->getActiveFinder($criteria->with);
        return 
$finder->query($criteria,$all);
    }
}

Выполняет фактический запрос к БД и заполняет объекты AR результатами запроса. Этот метод в основном используется внутренне другими методами запроса AR.

refresh() метод

public boolean refresh()
{return} boolean существует ли строка в базе данных. Если true, самые последние данные будут загружены в эту активную запись.
Исходный код: framework/db/ar/CActiveRecord.php#1245 (показать)
public function refresh()
{
    
Yii::trace(get_class($this).'.refresh()','system.db.ar.CActiveRecord');
    if((
$record=$this->findByPk($this->getPrimaryKey()))!==null)
    {
        
$this->_attributes=array();
        
$this->_related=array();
        foreach(
$this->getMetaData()->columns as $name=>$column)
        {
            if(
property_exists($this,$name))
                
$this->$name=$record->$name;
            else
                
$this->_attributes[$name]=$record->$name;
        }
        return 
true;
    }
    else
        return 
false;
}

Перезагружает эту активную запись с последними данными.

refreshMetaData() метод

public void refreshMetaData()
Исходный код: framework/db/ar/CActiveRecord.php#425 (показать)
public function refreshMetaData()
{
    
$className=get_class($this);
    if(
array_key_exists($className,self::$_md))
        unset(
self::$_md[$className]);
}

Обновляет метаданные для этого класса AR. Вызвав этот метод, этот класс AR перегенерирует необходимые метаданные. Это полезно, если схема таблицы была изменена, и вы хотите использовать самую последнюю схему таблицы. Убедитесь, что вы вызвали CDbSchema::refresh перед вызовом этого метода. В противном случае будут использоваться старые данные схемы таблицы.

relations() метод

public array relations()
{return} array список объявлений связанных объектов. По умолчанию — пустой массив.
Исходный код: framework/db/ar/CActiveRecord.php#540 (показать)
public function relations()
{
    return array();
}

Этот метод необходимо переопределить для объявления связанных объектов.

Существует четыре типа отношений между двумя объектами активной записи:

  • BELONGS_TO: например, член принадлежит команде;
  • HAS_ONE: например, член имеет не более одного профиля;
  • HAS_MANY: например, команда имеет многих членов;
  • MANY_MANY: например, член имеет множество навыков, и навык принадлежит члену.


Помимо вышеперечисленных типов отношений, также поддерживается специальное отношение STAT, которое можно использовать для выполнения статистических запросов (или агрегационных запросов). Оно извлекает агрегированную информацию о связанных объектах, например, количество комментариев к каждой публикации, среднюю оценку каждого продукта и т. д.

Каждый тип связанных объектов определяется в этом методе как массив со следующими элементами:
'varName'=>array('relationType', 'className', 'foreignKey', ...additional options)
где 'varName' относится к имени переменной/свойства, через которую можно получить доступ к связанному(ым) объекту(ам); 'relationType' относится к типу отношения, который может быть одним из четырёх констант: self::BELONGS_TO, self::HAS_ONE, self::HAS_MANY и self::MANY_MANY; 'className' относится к имени класса активной записи, к которому принадлежит(ат) связанный(ые) объект(ы); и 'foreignKey' указывает внешний ключ, который связывает два типа активной записи. Обратите внимание, что для составных внешних ключей они могут быть перечислены вместе, разделены запятыми или указаны как массив в формате массива ('ключ1','ключ2'). В случае необходимости указания пользовательской ассоциации PK->FK можно определить её как массив ('fk'=>'pk'). Для составных ключей это будет массив ('fk_c1'=>'pk_c1','fk_c2'=>'pk_c2'). Для внешних ключей, используемых в отношении MANY_MANY, таблица соединения также должна быть объявлена (например, 'join_table(fk1, fk2)').

Дополнительные параметры могут быть указаны как пары имя-значение в остальных элементах массива:
  • 'select': строка|массив, список столбцов для выбора. По умолчанию — '*', означающее все столбцы. Имена столбцов должны быть уточнены, если они встречаются в выражении (например, COUNT(relationName.name) AS name_count).
  • 'condition': строка, условие WHERE. По умолчанию — пустая строка. Обратите внимание, что ссылки на столбцы необходимо уточнять с префиксом 'relationName.' (например, relationName.age>20)
  • 'order': строка, условие ORDER BY. По умолчанию — пустая строка. Обратите внимание, что ссылки на столбцы необходимо уточнять с префиксом 'relationName.' (например, relationName.age DESC)
  • 'with': строка|массив, список связанных дочерних объектов, которые должны загружаться вместе с этим объектом. Обратите внимание, что это учитывается только при ленивой загрузке, а не при жадной загрузке.
  • 'joinType': тип соединения. По умолчанию — 'LEFT OUTER JOIN'.
  • 'alias': псевдоним для таблицы, связанной с этим отношением. По умолчанию — null, что означает, что псевдоним таблицы совпадает с именем отношения.
  • 'params': параметры, которые нужно привязать к сгенерированному SQL-запросу. Это должно быть задано как массив пар имя-значение.
  • 'on': условие ON. Условие, указанное здесь, будет добавлено к условию соединения с помощью оператора AND.
  • 'index': имя столбца, значения которого должны использоваться в качестве ключей массива, хранящего связанные объекты. Этот параметр доступен только для отношений HAS_MANY и MANY_MANY.
  • 'scopes': области применения. В случае одного scope может быть использован как 'scopes'=>'scopeName', в случае нескольких scope может быть использован как 'scopes'=>array('scopeName1','scopeName2'). Этот параметр доступен с версии 1.1.9.


Следующие параметры доступны для некоторых отношений при ленивой загрузке:
  • 'group': строка, условие GROUP BY. По умолчанию — пустая строка. Обратите внимание, что ссылки на столбцы необходимо уточнять с префиксом 'relationName.' (например, relationName.age). Этот параметр применим только к отношениям HAS_MANY и MANY_MANY.
  • 'having': строка, условие HAVING. По умолчанию — пустая строка. Обратите внимание, что ссылки на столбцы необходимо уточнять с префиксом 'relationName.' (например, relationName.age). Этот параметр применим только к отношениям HAS_MANY и MANY_MANY.
  • 'limit': ограничение на количество выбираемых строк. Этот параметр не применим к отношениям BELONGS_TO.
  • 'offset': смещение выбираемых строк. Этот параметр не применим к отношениям BELONGS_TO.
  • 'through': имя отношения модели, которое будет использоваться в качестве моста при получении связанных данных. Может быть задан только для HAS_ONE и HAS_MANY. Этот параметр доступен с версии 1.1.7.


Ниже приведен пример объявления связанных объектов для класса активной записи 'Post':
return array(
    'author'=>array(self::BELONGS_TO, 'User', 'author_id'),
    'comments'=>array(self::HAS_MANY, 'Comment', 'post_id', 'with'=>'author', 'order'=>'create_time DESC'),
    'tags'=>array(self::MANY_MANY, 'Tag', 'post_tag(post_id, tag_id)', 'order'=>'name'),
);

resetScope() метод (доступен с версии 1.1.2)

public static resetScope(boolean $resetDefault=true)
$resetDefault boolean включая область применения по умолчанию. Этот параметр доступен с версии 1.1.12
{return} static сам экземпляр AR
Исходный код: framework/db/ar/CActiveRecord.php#365 (показать)
public function resetScope($resetDefault=true)
{
    if(
$resetDefault)
        
$this->_c=new CDbCriteria();
    else
        
$this->_c=null;

    return 
$this;
}

Сбрасывает все применённые области применения и критерии.

save() метод

public boolean save(boolean $runValidation=true, array $attributes=NULL)
$runValidation boolean выполнять ли проверку перед сохранением записи. Если проверка завершится ошибкой, запись не будет сохранена в базе данных.
$attributes array список атрибутов, которые нужно сохранить. По умолчанию null, что означает, что будут сохранены все атрибуты, загруженные из БД.
{return} boolean успешно ли сохранение
Исходный код: framework/db/ar/CActiveRecord.php#808 (показать)
public function save($runValidation=true,$attributes=null)
{
    if(!
$runValidation || $this->validate($attributes))
        return 
$this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);
    else
        return 
false;
}

Сохраняет текущую запись.

Запись вставляется в таблицу базы данных как строка, если свойство isNewRecord равно true (обычно так происходит при создании записи с помощью оператора 'new'). В противном случае, она будет использоваться для обновления соответствующей строки в таблице (обычно так происходит, если запись получена с помощью одного из методов 'find').

Проверка валидности будет выполнена перед сохранением записи. Если проверка завершится ошибкой, запись не будет сохранена. Вы можете вызвать getErrors() для получения ошибок валидации.

Если запись сохраняется путём вставки, её свойство isNewRecord будет установлено в false, а свойство scenario — в 'update'. Если первичный ключ является автоинкрементным и не установлен перед вставкой, первичный ключ будет заполнен автоматически сгенерированным значением.

saveAttributes() метод

public boolean saveAttributes(array $attributes)
$attributes array атрибуты, которые необходимо обновить. Каждый элемент представляет имя атрибута или значение атрибута, индексированное по имени. В последнем случае, атрибут записи будет соответствующим образом изменён перед сохранением.
{return} boolean успешно ли обновление. Обратите внимание, что false также возвращается, если сохранение прошло успешно, но атрибуты не изменились, и драйвер базы данных возвращает 0 для числа обновлённых записей.
Исходный код: framework/db/ar/CActiveRecord.php#1159 (показать)
public function saveAttributes($attributes)
{
    if(!
$this->getIsNewRecord())
    {
        
Yii::trace(get_class($this).'.saveAttributes()','system.db.ar.CActiveRecord');
        
$values=array();
        foreach(
$attributes as $name=>$value)
        {
            if(
is_integer($name))
                
$values[$value]=$this->$value;
            else
                
$values[$name]=$this->$name=$value;
        }
        if(
$this->_pk===null)
            
$this->_pk=$this->getPrimaryKey();
        if(
$this->updateByPk($this->getOldPrimaryKey(),$values)>0)
        {
            
$this->_pk=$this->getPrimaryKey();
            return 
true;
        }
        else
            return 
false;
    }
    else
        throw new 
CDbException(Yii::t('yii','The active record cannot be updated because it is new.'));
}

Сохраняет выбранный список атрибутов. В отличие от save, этот метод сохраняет только указанные атрибуты существующего набора данных строки и НЕ вызывает ни beforeSave, ни afterSave. Также обратите внимание, что этот метод не выполняет ни фильтрацию атрибутов, ни проверку. Поэтому не используйте этот метод с ненадежными данными (например, данными, отправленными пользователем). Вы можете рассмотреть следующий альтернативный вариант, если хотите сделать это:

$postRecord=Post::model()->findByPk($postID);
$postRecord->attributes=$_POST['post'];
$postRecord->save();

saveCounters() метод (доступен начиная с версии v1.1.8)

public boolean saveCounters(array $counters)
$counters array счётчики, которые необходимо обновить (имя столбца=>приращение значения)
{return} boolean успешно ли сохранение
Исходный код: framework/db/ar/CActiveRecord.php#1201 (показать)
public function saveCounters($counters)
{
    
Yii::trace(get_class($this).'.saveCounters()','system.db.ar.CActiveRecord');
    
$builder=$this->getCommandBuilder();
    
$table=$this->getTableSchema();
    
$criteria=$builder->createPkCriteria($table,$this->getOldPrimaryKey());
    
$command=$builder->createUpdateCounterCommand($this->getTableSchema(),$counters,$criteria);
    if(
$command->execute())
    {
        foreach(
$counters as $name=>$value)
            
$this->$name=$this->$name+$value;
        return 
true;
    }
    else
        return 
false;
}

Сохраняет один или несколько счётчиков столбцов для текущего объекта AR. Обратите внимание, что этот метод отличается от updateCounters тем, что он сохраняет только текущий объект AR. Пример использования:

$postRecord=Post::model()->findByPk($postID);
$postRecord->saveCounters(array('view_count'=>1));
Используйте отрицательные значения, если хотите уменьшить счётчики.

См. также

  • updateCounters

scopes() метод

public array scopes()
{return} array определение области. Ключи массива — имена областей; значения массива — соответствующие определения областей. Каждое определение области представлено как массив, ключи которого должны быть свойствами CDbCriteria.
Исходный код: framework/db/ar/CActiveRecord.php#576 (показать)
public function scopes()
{
    return array();
}

Возвращает объявление именованных областей. Именованная область представляет критерии запроса, которые могут быть объединены друг с другом и применены к запросу. Этот метод должен переопределяться дочерними классами для объявления именованных областей для конкретных классов AR. Например, следующий код объявляет две именованные области: 'recently' и 'published'.

return array(
    'published'=>array(
          'condition'=>'status=1',
    ),
    'recently'=>array(
          'order'=>'create_time DESC',
          'limit'=>5,
    ),
);
Если вышеуказанные области объявлены в модели 'Post', мы можем выполнить следующие запросы:
$posts=Post::model()->published()->findAll();
$posts=Post::model()->published()->recently()->findAll();
$posts=Post::model()->published()->with('comments')->findAll();
Обратите внимание, что последний запрос — реляционный запрос.

setAttribute() метод

public boolean setAttribute(string $name, mixed $value)
$name string имя атрибута
$value mixed значение атрибута.
{return} boolean существует ли атрибут и выполнено ли присваивание успешно
Исходный код: framework/db/ar/CActiveRecord.php#712 (показать)
public function setAttribute($name,$value)
{
    if(
property_exists($this,$name))
        
$this->$name=$value;
    elseif(isset(
$this->getMetaData()->columns[$name]))
        
$this->_attributes[$name]=$value;
    else
        return 
false;
    return 
true;
}

Устанавливает значение именованного атрибута. Вы также можете использовать $this->AttributeName для установки значения атрибута.

См. также

  • hasAttribute

setDbCriteria() метод (доступен начиная с версии v1.1.3)

public void setDbCriteria(CDbCriteria $criteria)
$criteria CDbCriteria критерии запроса
Исходный код: framework/db/ar/CActiveRecord.php#340 (показать)
public function setDbCriteria($criteria)
{
    
$this->_c=$criteria;
}

Устанавливает критерии запроса для текущей модели.

setIsNewRecord() метод

public void setIsNewRecord(boolean $value)
$value boolean является ли запись новой и должна ли она вставляться при вызове save.
Исходный код: framework/db/ar/CActiveRecord.php#834 (показать)
public function setIsNewRecord($value)
{
    
$this->_new=$value;
}

Устанавливает, является ли запись новой.

См. также

  • getIsNewRecord

setOldPrimaryKey() метод (доступен начиная с версии v1.1.3)

public void setOldPrimaryKey(mixed $value)
$value mixed старое значение первичного ключа.
Исходный код: framework/db/ar/CActiveRecord.php#1336 (показать)
public function setOldPrimaryKey($value)
{
    
$this->_pk=$value;
}

Устанавливает старое значение первичного ключа.

setPrimaryKey() метод (доступен начиная с версии v1.1.0)

public void setPrimaryKey(mixed $value)
$value mixed новое значение первичного ключа. Если первичный ключ составной, новое значение должно быть предоставлено в виде массива (имя столбца=>значение столбца).
Исходный код: framework/db/ar/CActiveRecord.php#1304 (показать)
public function setPrimaryKey($value)
{
    
$this->_pk=$this->getPrimaryKey();
    
$table=$this->getTableSchema();
    if(
is_string($table->primaryKey))
        
$this->{$table->primaryKey}=$value;
    elseif(
is_array($table->primaryKey))
    {
        foreach(
$table->primaryKey as $name)
            
$this->$name=$value[$name];
    }
}

Устанавливает значение первичного ключа. После вызова этого метода, старое значение первичного ключа можно получить из oldPrimaryKey.

setTableAlias() метод (доступен начиная с версии v1.1.3)

public void setTableAlias(string $alias)
$alias string псевдоним таблицы, который будет использоваться в запросах. Псевдоним не должен быть заключён в кавычки.
Исходный код: framework/db/ar/CActiveRecord.php#1444 (показать)
public function setTableAlias($alias)
{
    
$this->_alias=$alias;
}

Устанавливает псевдоним таблицы, который будет использоваться в запросах.

tableName() метод

public string tableName()
{return} string имя таблицы
Исходный код: framework/db/ar/CActiveRecord.php#438 (показать)
public function tableName()
{
    
$tableName = get_class($this);
    if((
$pos=strrpos($tableName,'\\')) !== false)
        return 
substr($tableName,$pos+1);
    return 
$tableName;
}

Возвращает имя связанной таблицы базы данных. По умолчанию этот метод возвращает имя класса в качестве имени таблицы. Вы можете переопределить этот метод, если таблица не имеет такого наименования.

together() метод (доступен начиная с v1.1.4)

public static together()
{return} static сам объект AR
Исходный код: framework/db/ar/CActiveRecord.php#1733 (показать)
public function together()
{
    
$this->getDbCriteria()->together=true;
    return 
$this;
}

Устанавливает свойство CDbCriteria::together в значение true. Это используется только в реляционных запросах AR. Подробную информацию см. в CDbCriteria::together.

update() метод

public boolean update(array $attributes=NULL)
$attributes массив список атрибутов, которые нужно сохранить. По умолчанию null, что означает, что будут сохранены все атрибуты, загруженные из БД.
{return} boolean успешность обновления
Исходный код: framework/db/ar/CActiveRecord.php#1121 (показать)
public function update($attributes=null)
{
    if(
$this->getIsNewRecord())
        throw new 
CDbException(Yii::t('yii','The active record cannot be updated because it is new.'));
    if(
$this->beforeSave())
    {
        
Yii::trace(get_class($this).'.update()','system.db.ar.CActiveRecord');
        if(
$this->_pk===null)
            
$this->_pk=$this->getPrimaryKey();
        
$this->updateByPk($this->getOldPrimaryKey(),$this->getAttributes($attributes));
        
$this->_pk=$this->getPrimaryKey();
        
$this->afterSave();
        return 
true;
    }
    else
        return 
false;
}

Обновляет строку, представленную этим активным записями. Все загруженные атрибуты будут сохранены в базе данных. Обратите внимание, валидация в этом методе не выполняется. Вы можете вызвать validate для выполнения валидации.

updateAll() метод

public integer updateAll(array $attributes, mixed $condition='', array $params=array ( ))
$attributes массив список атрибутов (имя=>значение) для обновления
$condition смешанный тип условие запроса или критерии.
$params массив параметры, которые будут связаны с SQL-запросом.
{return} целое число количество обновлённых строк
Исходный код: framework/db/ar/CActiveRecord.php#1768 (показать)
public function updateAll($attributes,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.updateAll()','system.db.ar.CActiveRecord');
    
$builder=$this->getCommandBuilder();
    
$criteria=$builder->createCriteria($condition,$params);
    
$command=$builder->createUpdateCommand($this->getTableSchema(),$attributes,$criteria);
    return 
$command->execute();
}

Обновляет записи, соответствующие указанному условию. См. find() для подробного объяснения $condition и $params. Обратите внимание, атрибуты не проверяются на безопасность, и валидация не выполняется.

updateByPk() метод

public integer updateByPk(mixed $pk, array $attributes, mixed $condition='', array $params=array ( ))
$pk смешанный тип значение первичного ключа(ей). Используйте массив для множественных первичных ключей. Для составного ключа каждое значение ключа должно быть массивом (имя столбца=>значение столбца).
$attributes массив список атрибутов (имя=>значение) для обновления
$condition смешанный тип условие запроса или критерии.
$params массив параметры, которые будут связаны с SQL-запросом.
{return} целое число количество обновлённых строк
Исходный код: framework/db/ar/CActiveRecord.php#1749 (показать)
public function updateByPk($pk,$attributes,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.updateByPk()','system.db.ar.CActiveRecord');
    
$builder=$this->getCommandBuilder();
    
$table=$this->getTableSchema();
    
$criteria=$builder->createPkCriteria($table,$pk,$condition,$params);
    
$command=$builder->createUpdateCommand($table,$attributes,$criteria);
    return 
$command->execute();
}

Обновляет записи с указанным первичным ключом(ями). См. find() для подробного объяснения $condition и $params. Обратите внимание, атрибуты не проверяются на безопасность, и валидация НЕ выполняется.

updateCounters() метод

public integer updateCounters(array $counters, mixed $condition='', array $params=array ( ))
$counters массив счётчики для обновления (имя столбца=>приращение значения)
$condition смешанный тип условие запроса или критерии.
$params массив параметры, которые будут связаны с SQL-запросом.
{return} целое число количество обновлённых строк
Исходный код: framework/db/ar/CActiveRecord.php#1787 (показать)
public function updateCounters($counters,$condition='',$params=array())
{
    
Yii::trace(get_class($this).'.updateCounters()','system.db.ar.CActiveRecord');
    
$builder=$this->getCommandBuilder();
    
$criteria=$builder->createCriteria($condition,$params);
    
$command=$builder->createUpdateCounterCommand($this->getTableSchema(),$counters,$criteria);
    return 
$command->execute();
}

Обновляет один или несколько счётчиков столбцов. Обратите внимание, что это обновляет все строки данных, если не указано условие или критерии. См. find() для подробного объяснения $condition и $params.

См. также

  • saveCounters

with() метод

public static with()
{return} static сам объект AR.
Исходный код: framework/db/ar/CActiveRecord.php#1713 (показать)
public function with()
{
    if(
func_num_args()>0)
    {
        
$with=func_get_args();
        if(
is_array($with[0]))  // the parameter is given as an array
            
$with=$with[0];
        if(!empty(
$with))
            
$this->getDbCriteria()->mergeWith(array('with'=>$with));
    }
    return 
$this;
}

Указывает, какие связанные объекты следует загружать с жадной загрузкой. Этот метод принимает переменное количество параметров. Каждый параметр указывает имя связи или дочерней связи. Например,

// find all posts together with their author and comments
Post::model()->with('author','comments')->findAll();
// find all posts together with their author and the author's profile
Post::model()->with('author','author.profile')->findAll();
Связи должны быть объявлены в relations().

По умолчанию используются параметры, указанные в relations(), для выполнения реляционного запроса. Для настройки параметров на лету необходимо передать массив в метод with(). Ключи массива — имена связей, а значения — соответствующие параметры запроса. Например,
Post::model()->with(array(
    'author'=>array('select'=>'id, name'),
    'comments'=>array('condition'=>'approved=1', 'order'=>'create_time'),
))->findAll();

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CActiveRecord

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API