Db Row
Описание
Строка в таблице, некий недо-ActiveRecord
Использование
Для корректной работы требует соответствующий класс Table
namespace Application\Users; /** * @property integer $id * @property string $login * @property string $created * @property string $updated */ class Row extends \Bluz\Db\Row { } $userRow = new \Application\Users\Row(); $userRow -> login = 'username'; $userRow -> save();
Аннотация в блоке комментариев необходимы лишь для поддержки автодополнения в IDE
Связанные записи
Данный функционал требует описание связей в соответствующей таблице, подробнее в статье Db-Relations
Для получения связанных записей следует использовать следующий код:
// query $userRows = Users\Table::find(1, 2, 3); // result foreach($userRows as $userRow) $groupRow = $userRow->getRelation('Groups');
Хуки
В Row существуют следующие хуки:
-
afterRead()- после получения данных из БД -
beforeSave()- до сохранения записи посредствомinsertилиupdate -
afterSave()- после -
beforeInsert()- до сохранения записи посредствомinsertи послеbeforeSave -
afterInsert()- после -
beforeUpdate()- до сохранения записи посредствомupdateи послеbeforeSave -
afterUpdate()- после -
beforeDelete()- до удаления записи -
afterDelete()- после
Пример использования хуков:
namespace Application\Users; /** * @property integer $id * @property string $login * @property string $created * @property string $updated */ class Row extends \Bluz\Db\Row { public function beforeInsert() { $this->created = gmdate('Y-m-d H:i:s'); } public function beforeUpdate() { $this->updated = gmdate('Y-m-d H:i:s'); } }
Валидация
с версии 0.4.3
Данные хуки так же следует использовать для проверки данных в Row, для этого достаточно генерировать исключение ValidatorException.
Так же можно использовать trait Validator\Trait\Validator, что упростит задачу по работе с ValidatorForm:
namespace Application\Pages; use Bluz\Validator\Traits\Validator; class Row extends \Bluz\Db\Row { use Validator; /** * {@inheritdoc} * * @return void */ public function beforeSave() { // title validator $this->addValidator('title') ->required() ; // alias validator $this->addValidator('alias') ->required() ->slug() ->callback( function ($input) { if ($row = $this->getTable()->findRowWhere(['alias' => $input])) { if ($row->id != $this->id) { return false; } } return true; }, 'Alias already exists' ) ; } }