Skip to content
Anton edited this page Nov 22, 2013 · 29 revisions

Описание

Строка в таблице, некий недо-ActiveRecord

Использование

Для корректной работы требует соответствующий класс Table

<?php
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

Связанные записи

Можно вытащить связанный записи в одном SQL запросе следующим образом:

<?php
// sql query with relation one to one
$sql = "
    select
         users.*
        , g.name AS __Groups_name
    from users
    left join groups g on users.group_id = g.id
";

// use it from controller
$userRows = $db->fetchObjects($sql, array(), '\Application\Users\Row');

// use it from Users\Table
$userRows = self::fetch($sql);

// result
foreach($userRows as $userRow)
    $groupRow = $userRow->getRelation('Groups');

Обратите внимание на SELECT, в нём можно увидеть конструкцию - g.name AS __Groups_name, тут Groups - имя связанной Row и его атрибут.

Хуки

В Row существуют следующие хуки:

  • afterRead - после получения данных из БД
  • beforeSave - до сохранения записи посредством insert или update
  • afterSave - после
  • beforeInsert - до сохранения записи посредством insert и после beforeSave
  • afterInsert - после
  • beforeUpdate - до сохранения записи посредством update и после beforeSave
  • afterUpdate - после
  • beforeDelete - до удаления записи
  • afterDelete - после

Пример использования хуков:

<?php
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');
   }
}

Clone this wiki locally