CActiveRecord
| Пакет | system.db.ar |
|---|---|
| Наследование | абстрактный класс CActiveRecord » CModel » CComponent |
| Реализует | ArrayAccess, Traversable, IteratorAggregate |
| С | 1.0 |
| Исходный код | framework/db/ar/CActiveRecord.php |
Он реализует шаблон активной записи, популярную технику отображения объекта-реляционной модели (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'.
См. также
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} | смешанное | значение возвращаемого метода |
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(). НЕ переопределяйте конструктор, если это не абсолютно необходимо! |
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} | смешанный тип | значение свойства |
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 можно было получать как свойства.
См. также
__isset() метод
public boolean __isset(string $name) | ||
| $name | строка | имя свойства или имя события |
| {return} | булево | является ли значение свойства null |
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 | смешанный тип | значение свойства |
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} | массив | |
public function __sleep()
{
return array_keys((array)$this);
}
Магический метод PHP sleep. Этот метод гарантирует, что ссылка на метаданные модели установлена в null.
__unset() метод
public void __unset(string $name) | ||
| $name | строка | имя свойства или имя события |
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, и индекс не нужен. |
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() |
protected function afterDelete()
{
if($this->hasEventHandler('onAfterDelete'))
$this->onAfterDelete(new CEvent($this));
}
Этот метод вызывается после удаления записи. По умолчанию он вызывает событие onAfterDelete. Вы можете переопределить этот метод для выполнения постобработки после удаления записи. Убедитесь, что вы вызываете родительскую реализацию, чтобы событие было вызвано должным образом.
afterFind() метод
protected void afterFind() |
protected function afterFind()
{
if($this->hasEventHandler('onAfterFind'))
$this->onAfterFind(new CEvent($this));
}
Этот метод вызывается после создания каждой записи методом поиска. По умолчанию он вызывает событие onAfterFind. Вы можете переопределить этот метод для выполнения постобработки каждой новой найденной записи. Убедитесь, что вы вызываете родительскую реализацию, чтобы событие было вызвано должным образом.
afterFindInternal() метод
public void afterFindInternal() |
public function afterFindInternal()
{
$this->afterFind();
}
Вызывает afterFind. Этот метод используется внутренне.
afterSave() метод
protected void afterSave() |
protected function afterSave()
{
if($this->hasEventHandler('onAfterSave'))
$this->onAfterSave(new CEvent($this));
}
Этот метод вызывается после успешного сохранения записи. По умолчанию он вызывает событие onAfterSave. Вы можете переопределить этот метод для выполнения постобработки после сохранения записи. Убедитесь, что вы вызываете родительскую реализацию, чтобы событие было вызвано должным образом.
applyScopes() метод
public void applyScopes(CDbCriteria &$criteria) | ||
| $criteria | CDbCriteria | критерии запроса. Этот параметр может быть изменён путём слияния с dbCriteria. |
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} | массив | список имён атрибутов. |
public function attributeNames()
{
return array_keys($this->getMetaData()->columns);
}
Возвращает список всех имён атрибутов модели. Это вернёт все имена столбцов таблицы, связанной с этим классом AR.
beforeCount() метод (доступен с v1.1.14)
protected void beforeCount() |
protected function beforeCount()
{
if($this->hasEventHandler('onBeforeCount'))
$this->onBeforeCount(new CEvent($this));
}
Этот метод вызывается перед выполнением запроса подсчёта AR-найдером. Вызовы подсчёта включают count и countByAttributes. По умолчанию он вызывает событие onBeforeCount. Если вы переопределите этот метод, убедитесь, что вызываете родительскую реализацию, чтобы событие было вызвано должным образом.
beforeDelete() метод
protected boolean beforeDelete() | ||
| {return} | булево | должна ли запись быть удалена. По умолчанию true. |
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() |
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() |
public function beforeFindInternal()
{
$this->beforeFind();
}
Вызывает beforeFind. Этот метод используется внутри.
beforeSave() метод
protected boolean beforeSave() | ||
| {return} | boolean | указывает, нужно ли выполнять сохранение. По умолчанию true. |
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 | сам экземпляр активной записи. |
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 для сохранения максимальной точности. |
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 для сохранения максимальной точности. |
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 для сохранения максимальной точности. |
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. |
public function defaultScope()
{
return array();
}
Возвращает стандартную именованную область видимости, которая должна неявно применяться ко всем запросам для этой модели. Важно: стандартная область видимости применяется только к запросам SELECT. Она игнорируется для запросов INSERT, UPDATE и DELETE. По умолчанию возвращает пустой массив. Вы можете переопределить этот метод, если модели необходимо запросить с некоторыми стандартными критериями (например, должны возвращаться только активные записи).
delete() метод
public boolean delete() | ||
| {return} | boolean | указывает, удалось ли удалить. |
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 | количество строк, удаленных. |
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} | целое число | количество строк, затронутых выполнением. |
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} | целое число | количество строк, удаленных. |
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} | логическое | являются ли две активные записи ссылкой на одну и ту же строку в таблице базы данных. |
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} | логическое | есть ли строка, удовлетворяющая указанному условию. |
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, если запись не найдена. |
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} | статический массив | список активных записей, удовлетворяющих заданному условию. Если не найдено ни одной, возвращается пустой массив. |
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} | статический массив | найденные записи. Если не найдено ни одной, возвращается пустой массив. |
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} | статический массив | найденные записи. Если не найдено ни одной, возвращается пустой массив. |
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} | статический массив | найденные записи. Если не найдено ни одной, возвращается пустой массив. |
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, если запись не найдена. |
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, если запись не найдена. |
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, если запись не найдена. |
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 | активный поиск для операции |
public function getActiveFinder($with)
{
return new CActiveFinder($this,$with);
}
Возвращает новый экземпляр активного поиска, учитывая опции 'with'.
getActiveRelation() метод
public CActiveRelation getActiveRelation(string $name) | ||
| $name | string | имя отношения |
| {return} | CActiveRelation | объявленное отношение для этого класса AR. Null, если отношение не существует. |
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, если атрибут не задан или не существует. |
public function getAttribute($name)
{
if(property_exists($this,$name))
return $this->$name;
elseif(isset($this->_attributes[$name]))
return $this->_attributes[$name];
}
Возвращает значение заданного атрибута. Если это новая запись, и атрибут не задан, возвращается значение по умолчанию. Если запись является результатом запроса и атрибут не загружен, возвращается null. Также можно использовать $this->AttributeName для получения значения атрибута.
См. также
getAttributeLabel() метод (доступен начиная с v1.1.4)
public string getAttributeLabel(string $attribute) | ||
| $attribute | string | имя атрибута |
| {return} | string | метка атрибута |
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".
См. также
getAttributes() метод
public array getAttributes(mixed $names=true) | ||
| $names | mixed | имена атрибутов, значения которых необходимо вернуть. Если true (по умолчанию), возвращаются все значения атрибутов, включая те, которые не загружены из БД (для них возвращается null). Если null, возвращаются все атрибуты, кроме тех, которые не загружены из БД. |
| {return} | array | значения атрибутов, индексированные по именам атрибутов. |
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 |
public function getCommandBuilder()
{
return $this->getDbConnection()->getSchema()->getCommandBuilder();
}
Возвращает используемый этим AR строитель команд.
getDbConnection() метод
public CDbConnection getDbConnection() | ||
| {return} | CDbConnection | соединение с базой данных, используемое активной записью. |
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 | критерии запроса, связанные с этой моделью. Эти критерии в основном используются в функции именных скопов для накопления различных критериев. |
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. |
public function getIsNewRecord()
{
return $this->_new;
}
Возвращает, является ли текущая запись новой (её никогда не сохраняли в базе данных)
getMetaData() метод
public CActiveRecordMetaData getMetaData() | ||
| {возврат} | CActiveRecordMetaData | метаданные для этого класса AR. |
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. |
public function getOldPrimaryKey()
{
return $this->_pk;
}
Возвращает старое значение первичного ключа. Относится к значению первичного ключа, которое заполняется в запись после выполнения метода поиска (например, find(), findAll()). Значение остаётся неизменным, даже если атрибуту первичного ключа вручную присвоено другое значение.
getPrimaryKey() метод
public mixed getPrimaryKey() | ||
| {возврат} | mixed | значение первичного ключа. Возвращается массив (имя столбца => значение столбца), если первичный ключ составной. Если первичный ключ не определён, возвращается null. |
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 | связанный(ые) объект(ы). |
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 | стандартный псевдоним таблицы |
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 |
public function getTableSchema()
{
return $this->getMetaData()->tableSchema;
}
Возвращает метаданные таблицы, к которой принадлежит этот AR
hasAttribute() метод
public boolean hasAttribute(string $name) | ||
| $name | string | имя атрибута |
| {возврат} | boolean | имеет ли этот AR указанный атрибут (столбец таблицы). |
public function hasAttribute($name)
{
return isset($this->getMetaData()->columns[$name]);
}
Проверяет, есть ли у этого AR указанный атрибут
hasRelated() метод
public boolean hasRelated(string $name) | ||
| $name | string | имя отношения |
| {возврат} | boolean | значение, указывающее, загружен ли указанный связанный объект(ы). |
public function hasRelated($name)
{
return isset($this->_related[$name]) || array_key_exists($name,$this->_related);
}
Возвращает значение, указывающее, загружен ли указанный связанный объект(ы).
init() метод
public void init() |
Инициализирует эту модель. Этот метод вызывается, когда экземпляр AR только что создан и его scenario установлен. Вы можете переопределить этот метод, чтобы предоставить код, необходимый для инициализации модели (например, установить начальные значения свойств).
insert() метод
public boolean insert(array $attributes=NULL) | ||
| $attributes | array | список атрибутов, которые нужно сохранить. По умолчанию null, что означает, что все атрибуты, загруженные из БД, будут сохранены. |
| {возврат} | boolean | являются ли атрибуты валидными и была ли запись успешно вставлена. |
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} | статический | активный объект |
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} | статический | экземпляр модели активной записи. |
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} | булево | |
public function offsetExists($offset)
{
return $this->__isset($offset);
}
Возвращает, существует ли элемент по указанному смещению. Этот метод требуется интерфейсом ArrayAccess.
onAfterDelete() метод
public void onAfterDelete(CEvent $event) | ||
| $event | CEvent | параметр события |
public function onAfterDelete($event)
{
$this->raiseEvent('onAfterDelete',$event);
}
Это событие срабатывает после удаления записи.
onAfterFind() метод
public void onAfterFind(CEvent $event) | ||
| $event | CEvent | параметр события |
public function onAfterFind($event)
{
$this->raiseEvent('onAfterFind',$event);
}
Это событие срабатывает после создания записи методом поиска.
onAfterSave() метод
public void onAfterSave(CEvent $event) | ||
| $event | CEvent | параметр события |
public function onAfterSave($event)
{
$this->raiseEvent('onAfterSave',$event);
}
Это событие срабатывает после сохранения записи.
onBeforeCount() метод (доступен с версии v1.1.14)
public void onBeforeCount(CModelEvent $event) | ||
| $event | CModelEvent | параметр события |
public function onBeforeCount($event)
{
$this->raiseEvent('onBeforeCount',$event);
}
Это событие срабатывает перед выполнением подсчёта AR-поиском. Если вы хотите получить доступ к критериям запроса, используемым для подсчёта, или изменить их, вы можете использовать getDbCriteria(), чтобы настроить их в соответствии со своими потребностями. При изменении критериев в beforeCount необходимо убедиться, что вы используете правильный псевдоним таблицы, который отличается в обычном подсчёте и при вызове с отношениями. Вы можете использовать getTableAlias(), чтобы получить используемый псевдоним для предстоящего вызова подсчёта.
См. также
onBeforeDelete() метод
public void onBeforeDelete(CModelEvent $event) | ||
| $event | CModelEvent | параметр события |
public function onBeforeDelete($event)
{
$this->raiseEvent('onBeforeDelete',$event);
}
Это событие срабатывает перед удалением записи. Установив CModelEvent::isValid в false, можно остановить стандартный процесс delete().
onBeforeFind() метод
public void onBeforeFind(CModelEvent $event) | ||
| $event | CModelEvent | параметр события |
public function onBeforeFind($event)
{
$this->raiseEvent('onBeforeFind',$event);
}
Это событие срабатывает перед выполнением поиска AR. Это может быть вызов методов поиска CActiveRecords или вызов поиска, когда модель загружается в контексте отношений через ленивую или жадную загрузку. Если вы хотите получить доступ к критериям запроса, используемым для поиска, или изменить их, вы можете использовать getDbCriteria(), чтобы настроить их в соответствии со своими потребностями. При изменении критериев в beforeFind необходимо убедиться, что вы используете правильный псевдоним таблицы, который отличается в обычном поиске и при вызове с отношениями. Вы можете использовать getTableAlias(), чтобы получить используемый псевдоним для предстоящего вызова поиска. Обратите внимание, что изменение критериев полностью поддерживается с версии 1.1.13. В более ранних версиях были некоторые проблемы с контекстом отношений и правильным применением изменений.
См. также
onBeforeSave() метод
public void onBeforeSave(CModelEvent $event) | ||
| $event | CModelEvent | параметр события |
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, если входные данные ложны. |
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[] | список активных записей. |
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 | первичный ключ связанной таблицы базы данных. Если ключ — один столбец, он должен вернуть имя столбца; если ключ составной и состоит из нескольких столбцов, он должен вернуть массив имён столбцов ключа. |
Возвращает первичный ключ связанной таблицы базы данных. Этот метод предназначен для переопределения в том случае, если таблица не определена с первичным ключом (для некоторых устаревших баз данных). Если таблица уже определена с первичным ключом, переопределять этот метод не нужно. По умолчанию возвращает null, что означает использование первичного ключа, определённого в базе данных.
query() метод (доступен с версии 1.1.7)
protected mixed query(CDbCriteria $criteria, boolean $all=false) | ||
| $criteria | CDbCriteria | критерии запроса |
| $all | boolean | возвращать все данные |
| {return} | mixed | объекты AR, заполненные результатами запроса |
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, самые последние данные будут загружены в эту активную запись. |
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() |
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 | список объявлений связанных объектов. По умолчанию — пустой массив. |
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 |
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 | успешно ли сохранение |
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 для числа обновлённых записей. |
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 | успешно ли сохранение |
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));
Используйте отрицательные значения, если хотите уменьшить счётчики. См. также
scopes() метод
public array scopes() | ||
| {return} | array | определение области. Ключи массива — имена областей; значения массива — соответствующие определения областей. Каждое определение области представлено как массив, ключи которого должны быть свойствами CDbCriteria. |
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 | существует ли атрибут и выполнено ли присваивание успешно |
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 для установки значения атрибута.
См. также
setDbCriteria() метод (доступен начиная с версии v1.1.3)
public void setDbCriteria(CDbCriteria $criteria) | ||
| $criteria | CDbCriteria | критерии запроса |
public function setDbCriteria($criteria)
{
$this->_c=$criteria;
}
Устанавливает критерии запроса для текущей модели.
setIsNewRecord() метод
public void setIsNewRecord(boolean $value) | ||
| $value | boolean | является ли запись новой и должна ли она вставляться при вызове save. |
public function setIsNewRecord($value)
{
$this->_new=$value;
}
Устанавливает, является ли запись новой.
См. также
setOldPrimaryKey() метод (доступен начиная с версии v1.1.3)
public void setOldPrimaryKey(mixed $value) | ||
| $value | mixed | старое значение первичного ключа. |
public function setOldPrimaryKey($value)
{
$this->_pk=$value;
}
Устанавливает старое значение первичного ключа.
setPrimaryKey() метод (доступен начиная с версии v1.1.0)
public void setPrimaryKey(mixed $value) | ||
| $value | mixed | новое значение первичного ключа. Если первичный ключ составной, новое значение должно быть предоставлено в виде массива (имя столбца=>значение столбца). |
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 | псевдоним таблицы, который будет использоваться в запросах. Псевдоним не должен быть заключён в кавычки. |
public function setTableAlias($alias)
{
$this->_alias=$alias;
}
Устанавливает псевдоним таблицы, который будет использоваться в запросах.
tableName() метод
public string tableName() | ||
| {return} | string | имя таблицы |
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 |
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 | успешность обновления |
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} | целое число | количество обновлённых строк |
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} | целое число | количество обновлённых строк |
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} | целое число | количество обновлённых строк |
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.
См. также
with() метод
public static with() | ||
| {return} | static | сам объект AR. |
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