Skip to content
Anton edited this page Aug 30, 2017 · 29 revisions

Описание

Строка в таблице, некий недо-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'
            )
            ;
    }
}