Абстрактный класс Phalcon\Mvc\Model
реализует Phalcon\Mvc\EntityInterface, Phalcon\Mvc\ModelInterface, Phalcon\Mvc\Model\ResultInterface, Phalcon\Di\InjectionAwareInterface, Serializable, JsonSerializable
Phalcon\Mvc\Model связывает бизнес-объекты и таблицы базы данных, чтобы создать сохраняемую предметную модель, где логика и данные представлены в одном контейнере. Это реализация объектно-реляционного отображения (ORM).
Модель представляет информацию (данные) приложения и правила для манипулирования этими данными. Модели в основном используются для управления правилами взаимодействия с соответствующей таблицей базы данных. В большинстве случаев каждая таблица в вашей базе данных будет соответствовать одной модели в вашем приложении. Большая часть бизнес-логики вашего приложения будет сосредоточена в моделях.
Phalcon\Mvc\Model — первый ORM, написанный на языках Zephir/C для PHP, обеспечивая разработчикам высокую производительность при взаимодействии с базами данных, при этом он также прост в использовании.
$robot = new Robots();
$robot->type = "mechanical";
$robot->name = "Astro Boy";
$robot->year = 1952;
if ($robot->save() === false) {
echo "Umh, We can store robots: ";
$messages = $robot->getMessages();
foreach ($messages as $message) {
echo message;
}
} else {
echo "Great, a new robot was saved successfully!";
}
Константы
integer OP_NONE
integer OP_CREATE
integer OP_UPDATE
integer OP_DELETE
integer DIRTY_STATE_PERSISTENT
integer DIRTY_STATE_TRANSIENT
integer DIRTY_STATE_DETACHED
Методы
final public __construct ([mixed $data], [Phalcon\DiInterface $dependencyInjector], [Phalcon\Mvc\Model\ManagerInterface $modelsManager])
Конструктор Phalcon\Mvc\Model
public setDI (Phalcon\DiInterface $dependencyInjector)
Устанавливает контейнер инъекции зависимостей
public getDI ()
Возвращает контейнер инъекции зависимостей
protected setEventsManager (Phalcon\Events\ManagerInterface $eventsManager)
Устанавливает пользовательский менеджер событий
protected getEventsManager ()
Возвращает пользовательский менеджер событий
public getModelsMetaData ()
Возвращает службу метаданных моделей, связанную с экземпляром сущности
public getModelsManager ()
Возвращает менеджер моделей, связанный с экземпляром сущности
public setTransaction (Phalcon\Mvc\Model\TransactionInterface $transaction)
Устанавливает транзакцию, связанную с экземпляром модели
use Phalcon\Mvc\Model\Transaction\Manager as TxManager;
use Phalcon\Mvc\Model\Transaction\Failed as TxFailed;
try {
$txManager = new TxManager();
$transaction = $txManager->get();
$robot = new Robots();
$robot->setTransaction($transaction);
$robot->name = "WALL·E";
$robot->created_at = date("Y-m-d");
if ($robot->save() === false) {
$transaction->rollback("Can't save robot");
}
$robotPart = new RobotParts();
$robotPart->setTransaction($transaction);
$robotPart->type = "head";
if ($robotPart->save() === false) {
$transaction->rollback("Robot part cannot be saved");
}
$transaction->commit();
} catch (TxFailed $e) {
echo "Failed, reason: ", $e->getMessage();
}
protected setSource (mixed $source)
Устанавливает имя таблицы, к которой должна быть сопоставлена модель
public getSource ()
Возвращает имя таблицы, сопоставленной с моделью
protected setSchema (mixed $schema)
Устанавливает имя схемы, в которой расположена сопоставленная таблица
public getSchema ()
Возвращает имя схемы, в которой расположена сопоставленная таблица
public setConnectionService (mixed $connectionService)
Устанавливает имя службы соединения DependencyInjection
public setReadConnectionService (mixed $connectionService)
Устанавливает имя службы соединения DependencyInjection, используемое для чтения данных
public setWriteConnectionService (mixed $connectionService)
Устанавливает имя службы соединения DependencyInjection, используемое для записи данных
public getReadConnectionService ()
Возвращает имя службы соединения DependencyInjection, используемое для чтения данных, связанных с моделью
public getWriteConnectionService ()
Возвращает имя службы соединения DependencyInjection, используемое для записи данных, связанных с моделью
public setDirtyState (mixed $dirtyState)
Устанавливает состояние изменений объекта, используя одну из констант DIRTY_STATE_*
public getDirtyState ()
Возвращает одну из констант DIRTY_STATE_*, указывающую, существует ли запись в базе данных или нет
public getReadConnection ()
Получает соединение, используемое для чтения данных для модели
public getWriteConnection ()
Получает соединение, используемое для записи данных в модель
public Phalcon\Mvc\Model assign (array $data, [mixed $dataColumnMap], [array $whiteList])
Присваивает значения модели из массива
$robot->assign(
[
"type" => "mechanical",
"name" => "Astro Boy",
"year" => 1952,
]
);
// Assign by db row, column map needed
$robot->assign(
$dbRow,
[
"db_type" => "type",
"db_name" => "name",
"db_year" => "year",
]
);
// Allow assign only name and year
$robot->assign(
$_POST,
null,
[
"name",
"year",
]
);
public static cloneResultMap (Phalcon\Mvc\ModelInterface | Phalcon\Mvc\Model\Row $base, array $data, array $columnMap, [int $dirtyState], [boolean $keepSnapshots])
Присваивает значения модели из массива, возвращая новую модель.
$robot = \Phalcon\Mvc\Model::cloneResultMap(
new Robots(),
[
"type" => "mechanical",
"name" => "Astro Boy",
"year" => 1952,
]
);
public static mixed cloneResultMapHydrate (array $data, array $columnMap, int $hydrationMode)
Возвращает гидратированный результат на основе данных и сопоставления столбцов
public static Phalcon\Mvc\ModelInterface cloneResult (Phalcon\Mvc\ModelInterface $base, array $data, [int $dirtyState])
Присваивает значения модели из массива, возвращая новую модель
$robot = Phalcon\Mvc\Model::cloneResult(
new Robots(),
[
"type" => "mechanical",
"name" => "Astro Boy",
"year" => 1952,
]
);
public static find ([mixed $parameters])
Запрос набора записей, соответствующих указанным условиям
// How many robots are there?
$robots = Robots::find();
echo "There are ", count($robots), "\n";
// How many mechanical robots are there?
$robots = Robots::find(
"type = 'mechanical'"
);
echo "There are ", count($robots), "\n";
// Get and print virtual robots ordered by name
$robots = Robots::find(
[
"type = 'virtual'",
"order" => "name",
]
);
foreach ($robots as $robot) {
echo $robot->name, "\n";
}
// Get first 100 virtual robots ordered by name
$robots = Robots::find(
[
"type = 'virtual'",
"order" => "name",
"limit" => 100,
]
);
foreach ($robots as $robot) {
echo $robot->name, "\n";
}
public static static findFirst ([string | array $parameters])
Запрос первой записи, соответствующей указанным условиям
// What's the first robot in robots table?
$robot = Robots::findFirst();
echo "The robot name is ", $robot->name;
// What's the first mechanical robot in robots table?
$robot = Robots::findFirst(
"type = 'mechanical'"
);
echo "The first mechanical robot name is ", $robot->name;
// Get first virtual robot ordered by name
$robot = Robots::findFirst(
[
"type = 'virtual'",
"order" => "name",
]
);
echo "The first virtual robot name is ", $robot->name;
public static query ([Phalcon\DiInterface $dependencyInjector])
Создает критерии для конкретной модели
protected boolean _exists (Phalcon\Mvc\Model\MetaDataInterface $metaData, Phalcon\Db\AdapterInterface $connection, [string | array $table])
Проверяет, существует ли текущая запись
protected static Phalcon\Mvc\Model\ResultsetInterface _groupResult (mixed $functionName, string $alias, array $parameters)
Генерирует оператор PHQL SELECT для агрегации
public static mixed count ([array $parameters])
Подсчитывает количество записей, соответствующих указанным условиям
// How many robots are there?
$number = Robots::count();
echo "There are ", $number, "\n";
// How many mechanical robots are there?
$number = Robots::count("type = 'mechanical'");
echo "There are ", $number, " mechanical robots\n";
public static mixed sum ([array $parameters])
Вычисляет сумму по столбцу для набора строк, соответствующих указанным условиям
// How much are all robots?
$sum = Robots::sum(
[
"column" => "price",
]
);
echo "The total price of robots is ", $sum, "\n";
// How much are mechanical robots?
$sum = Robots::sum(
[
"type = 'mechanical'",
"column" => "price",
]
);
echo "The total price of mechanical robots is ", $sum, "\n";
public static mixed maximum ([array $parameters])
Возвращает максимальное значение столбца для набора строк, соответствующих указанным условиям
// What is the maximum robot id?
$id = Robots::maximum(
[
"column" => "id",
]
);
echo "The maximum robot id is: ", $id, "\n";
// What is the maximum id of mechanical robots?
$sum = Robots::maximum(
[
"type = 'mechanical'",
"column" => "id",
]
);
echo "The maximum robot id of mechanical robots is ", $id, "\n";
public static mixed minimum ([array $parameters])
Возвращает минимальное значение столбца для набора строк, соответствующих указанным условиям
// What is the minimum robot id?
$id = Robots::minimum(
[
"column" => "id",
]
);
echo "The minimum robot id is: ", $id;
// What is the minimum id of mechanical robots?
$sum = Robots::minimum(
[
"type = 'mechanical'",
"column" => "id",
]
);
echo "The minimum robot id of mechanical robots is ", $id;
public static double average ([array $parameters])
Возвращает среднее значение по столбцу для набора строк, соответствующих заданным условиям
// What's the average price of robots?
$average = Robots::average(
[
"column" => "price",
]
);
echo "The average price is ", $average, "\n";
// What's the average price of mechanical robots?
$average = Robots::average(
[
"type = 'mechanical'",
"column" => "price",
]
);
echo "The average price of mechanical robots is ", $average, "\n";
public fireEvent (mixed $eventName)
Вызывает событие, неявно вызывая методы обработки и уведомляя слушателей в менеджере событий
public fireEventCancel (mixed $eventName)
Вызывает событие, неявно вызывая обработчики и уведомляя слушателей в менеджере событий. Этот метод останавливается, если один из обратных вызовов/слушателей возвращает boolean false
protected _cancelOperation ()
Отменяет текущую операцию
public appendMessage (Phalcon\Mvc\Model\MessageInterface $message)
Добавляет пользовательское сообщение в процессе валидации
use Phalcon\Mvc\Model;
use Phalcon\Mvc\Model\Message as Message;
class Robots extends Model
{
public function beforeSave()
{
if ($this->name === "Peter") {
$message = new Message(
"Sorry, but a robot cannot be named Peter"
);
$this->appendMessage($message);
}
}
}
protected validate (Phalcon\ValidationInterface $validator)
Выполняет валидацию на каждом вызове
use Phalcon\Mvc\Model;
use Phalcon\Validation;
use Phalcon\Validation\Validator\ExclusionIn;
class Subscriptors extends Model
{
public function validation()
{
$validator = new Validation();
$validator->add(
"status",
new ExclusionIn(
[
"domain" => [
"A",
"I",
],
]
)
);
return $this->validate($validator);
}
}
public validationHasFailed ()
Проверяет, сгенерированы ли сообщения об ошибках в процессе валидации
use Phalcon\Mvc\Model;
use Phalcon\Validation;
use Phalcon\Validation\Validator\ExclusionIn;
class Subscriptors extends Model
{
public function validation()
{
$validator = new Validation();
$validator->validate(
"status",
new ExclusionIn(
[
"domain" => [
"A",
"I",
],
]
)
);
return $this->validate($validator);
}
}
public getMessages ([mixed $filter])
Возвращает массив сообщений об ошибках валидации
$robot = new Robots();
$robot->type = "mechanical";
$robot->name = "Astro Boy";
$robot->year = 1952;
if ($robot->save() === false) {
echo "Umh, We can't store robots right now ";
$messages = $robot->getMessages();
foreach ($messages as $message) {
echo $message;
}
} else {
echo "Great, a new robot was saved successfully!";
}
final protected _checkForeignKeysRestrict ()
Читает отношения «принадлежит» и проверяет виртуальные внешние ключи при вставке или обновлении записей, чтобы убедиться, что вставленные/обновленные значения присутствуют в связанной сущности
final protected _checkForeignKeysReverseCascade ()
Читает отношения «многие-ко-многим» и «один-ко-многим» и проверяет виртуальные внешние ключи (каскадное удаление) при удалении записей
final protected _checkForeignKeysReverseRestrict ()
Читает отношения «многие-ко-многим» и «один-ко-многим» и проверяет виртуальные внешние ключи (ограничение) при удалении записей
protected _preSave (Phalcon\Mvc\Model\MetaDataInterface $metaData, mixed $exists, mixed $identityField)
Выполняет внутренние события перед сохранением записи
protected _postSave (mixed $success, mixed $exists)
Выполняет внутренние события после сохранения записи
protected boolean _doLowInsert (Phalcon\Mvc\Model\MetaDataInterface $metaData, Phalcon\Db\AdapterInterface $connection, string | array $table, boolean | string $identityField)
Отправляет предварительно сгенерированное SQL-утверждение INSERT в реляционную базу данных
protected boolean _doLowUpdate (Phalcon\Mvc\Model\MetaDataInterface $metaData, Phalcon\Db\AdapterInterface $connection, string | array $table)
Отправляет предварительно сгенерированное SQL-утверждение UPDATE в реляционную базу данных
protected boolean _preSaveRelatedRecords (Phalcon\Db\AdapterInterface $connection, Phalcon\Mvc\ModelInterface[] $related)
Сохраняет связанные записи, которые должны быть сохранены перед сохранением основной записи
protected boolean _postSaveRelatedRecords (Phalcon\Db\AdapterInterface $connection, Phalcon\Mvc\ModelInterface[] $related)
Сохраняет связанные записи, заданные отношениями один-ко-одному/многие-ко-многим
public boolean save ([array $data], [array $whiteList])
Вставляет или обновляет экземпляр модели. Возвращает true при успехе, иначе false.
// Creating a new robot
$robot = new Robots();
$robot->type = "mechanical";
$robot->name = "Astro Boy";
$robot->year = 1952;
$robot->save();
// Updating a robot name
$robot = Robots::findFirst("id = 100");
$robot->name = "Biomass";
$robot->save();
public create ([mixed $data], [mixed $whiteList])
Вставляет экземпляр модели. Если экземпляр уже существует в хранилище, будет выброшено исключение. Возвращает true при успехе, иначе false.
// Creating a new robot
$robot = new Robots();
$robot->type = "mechanical";
$robot->name = "Astro Boy";
$robot->year = 1952;
$robot->create();
// Passing an array to create
$robot = new Robots();
$robot->create(
[
"type" => "mechanical",
"name" => "Astro Boy",
"year" => 1952,
]
);
public update ([mixed $data], [mixed $whiteList])
Обновляет экземпляр модели. Если экземпляр не существует в хранилище, будет выброшено исключение. Возвращает true при успехе, иначе false.
// Updating a robot name
$robot = Robots::findFirst("id = 100");
$robot->name = "Biomass";
$robot->update();
public delete ()
Удаляет экземпляр модели. Возвращает true при успехе, иначе false.
$robot = Robots::findFirst("id=100");
$robot->delete();
$robots = Robots::find("type = 'mechanical'");
foreach ($robots as $robot) {
$robot->delete();
}
public getOperationMade ()
Возвращает тип последней операции, выполненной ORM. Возвращает одну из констант класса OP_*
public refresh ()
Обновляет атрибуты модели, повторно запрашивая запись из базы данных
public skipOperation (mixed $skip)
Пропускает текущую операцию, принудительно устанавливая успешное состояние
public readAttribute (mixed $attribute)
Читает значение атрибута по его имени
echo $robot->readAttribute("name");
public writeAttribute (mixed $attribute, mixed $value)
Записывает значение атрибута по его имени
$robot->writeAttribute("name", "Rosey");
protected skipAttributes (array $attributes)
Устанавливает список атрибутов, которые должны быть пропущены в генерируемом SQL-утверждении INSERT/UPDATE
<?php
class Robots extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->skipAttributes(
[
"price",
]
);
}
}
protected skipAttributesOnCreate (array $attributes)
Устанавливает список атрибутов, которые должны быть пропущены в генерируемом SQL-утверждении INSERT
<?php
class Robots extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->skipAttributesOnCreate(
[
"created_at",
]
);
}
}
protected skipAttributesOnUpdate (array $attributes)
Устанавливает список атрибутов, которые должны быть пропущены в генерируемом SQL-утверждении UPDATE
<?php
class Robots extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->skipAttributesOnUpdate(
[
"modified_in",
]
);
}
}
protected allowEmptyStringValues (array $attributes)
Устанавливает список атрибутов, значения которых могут быть пустыми строками
<?php
class Robots extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->allowEmptyStringValues(
[
"name",
]
);
}
}
protected hasOne (mixed $fields, mixed $referenceModel, mixed $referencedFields, [mixed $options])
Настройка отношения один-к-одному между двумя моделями
<?php
class Robots extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->hasOne("id", "RobotsDescription", "robots_id");
}
}
protected belongsTo (mixed $fields, mixed $referenceModel, mixed $referencedFields, [mixed $options])
Настройка обратного отношения один-к-одному или один-ко-многим между двумя моделями
<?php
class RobotsParts extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->belongsTo("robots_id", "Robots", "id");
}
}
protected hasMany (mixed $fields, mixed $referenceModel, mixed $referencedFields, [mixed $options])
Настройка отношения один-ко-многим между двумя моделями
<?php
class Robots extends \Phalcon\Mvc\Model
{
public function initialize()
{
$this->hasMany("id", "RobotsParts", "robots_id");
}
}
protected Phalcon\Mvc\Model\Relation hasManyToMany (string | array $fields, string $intermediateModel, string | array $intermediateFields, string | array $intermediateReferencedFields, mixed $referenceModel, string | array $referencedFields, [array $options])
Настройка отношения многие-ко-многим между двумя моделями через промежуточную модель
<?php
class Robots extends \Phalcon\Mvc\Model
{
public function initialize()
{
// Setup a many-to-many relation to Parts through RobotsParts
$this->hasManyToMany(
"id",
"RobotsParts",
"robots_id",
"parts_id",
"Parts",
"id",
);
}
}
public addBehavior (Phalcon\Mvc\Model\BehaviorInterface $behavior)
Установка поведения в модели
<?php
use Phalcon\Mvc\Model;
use Phalcon\Mvc\Model\Behavior\Timestampable;
class Robots extends Model
{
public function initialize()
{
$this->addBehavior(
new Timestampable(
[
"onCreate" => [
"field" => "created_at",
"format" => "Y-m-d",
],
]
)
);
}
}
protected keepSnapshots (mixed $keepSnapshot)
Устанавливает, должна ли модель сохранять исходную запись в памяти
<?php
use Phalcon\Mvc\Model;
class Robots extends Model
{
public function initialize()
{
$this->keepSnapshots(true);
}
}
public setSnapshotData (array $data, [array $columnMap])
Устанавливает данные снимка записи. Этот метод используется для установки данных снимка, когда модель настроена на сохранение данных снимка.
public hasSnapshotData ()
Проверяет, есть ли у объекта внутренние данные снимка
public getSnapshotData ()
Возвращает внутренние данные снимка
public hasChanged ([string | array $fieldName])
Проверяет, изменился ли конкретный атрибут. Это работает только если модель сохраняет данные снимков
public getChangedFields ()
Возвращает список измененных значений.
$robots = Robots::findFirst(); print_r($robots->getChangedFields()); // [] $robots->deleted = 'Y'; $robots->getChangedFields(); print_r($robots->getChangedFields()); // ["deleted"]
protected useDynamicUpdate (mixed $dynamicUpdate)
Устанавливает, должна ли модель использовать динамическое обновление вместо обновления всех полей
<?php
use Phalcon\Mvc\Model;
class Robots extends Model
{
public function initialize()
{
$this->useDynamicUpdate(true);
}
}
public Phalcon\Mvc\Model\ResultsetInterface getRelated (string $alias, [array $arguments])
Возвращает связанные записи на основе определенных отношений
protected mixed _getRelatedRecords (string $modelName, string $method, array $arguments)
Возвращает связанные записи, определенные отношениями в зависимости от имени метода
final protected static Phalcon\Mvc\ModelInterface[] | Phalcon\Mvc\ModelInterface | boolean _invokeFinder (string $method, array $arguments)
Проверяет, нужно ли вызывать поиск
public mixed __call (string $method, array $arguments)
Обрабатывает вызовы методов, если метод не реализован
public static mixed __callStatic (string $method, array $arguments)
Обрабатывает вызовы статических методов, если метод не реализован
public __set (string $property, mixed $value)
Магический метод для присвоения значений модели
final protected string _possibleSetter (string $property, mixed $value)
Проверка и попытка использования возможного сеттера.
public Phalcon\Mvc\Model\Resultset | Phalcon\Mvc\Model __get (string $property)
Магический метод для получения связанных записей, используя псевдоним отношения в качестве свойства
public __isset (mixed $property)
Магический метод для проверки, является ли свойство допустимым отношением
public serialize ()
Сериализует объект, игнорируя подключения, сервисы, связанные объекты или статические свойства
public unserialize (mixed $data)
Десериализует объект из сериализованной строки
public dump ()
Возвращает простое представление объекта, которое можно использовать с var_dump
var_dump(
$robot->dump()
);
public array toArray ([array $columns])
Возвращает экземпляр в виде массива
print_r(
$robot->toArray()
);
public array jsonSerialize ()
Сериализует объект для json_encode
echo json_encode($robot);
public static setup (array $options)
Включает/отключает параметры в ORM
public reset ()
Сбросить данные экземпляра модели
© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Model.html