Skip to content
Anton edited this page May 15, 2015 · 6 revisions

Описание

с версии 1.0.0

Статический класс, хранящий описания связей в БД

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

При инициализации любого Db\Table класса в классе Relations добавляется запись о привязки модели к классу:

Db\Relations::$relations[
    'Model' => '\Applications\Model\Table',
    'Users' => '\Applications\Users\Table'
];

Один-к-одному или один-ко-многим

Далее необходимо инициировать связи в классе Table который вы будете использовать:

namespace Application\Pages;

use \Bluz\Db\Relations;

class Table extends \Bluz\Db\Table
{
    public function init() {
        // one to many relation
        $this->linkTo('userId', 'Users', 'id');
    }
}

Всё, можно использовать:

namespace Application;

/* @var Pages\Row */
$page = Pages\Table::findRow($id);
$user = $page->getRelation('Users');

// page owner login
echo $user->login;

$pages = $user->getRelations('Pages');

// pages of user
echo sizeof($pages);

Многое-ко-многим

Для организации связи многое-ко-многим потребуется третья связующая таблица, приведу пример:

| users   |  | roles   |  | users_roles |
| - id    |  | - id    |  | - userId    |
| - name  |  | - role  |  | - roleId    |

Теперь необходимо описать правильно связи. Первое - необходимо в таблице описывающей таблицу связей добавить две связи один-ко-многим:

namespace Application\UsersRoles;
class Table extends \Bluz\Db\Table
{
    public function init()
    {
        $this->linkTo('userId', 'Users', 'id');
        $this->linkTo('roleId', 'Roles', 'id');
    }
}

Теперь в каждой из необходимых нам таблиц необходимо прописать связь многое-ко-многим:

namespace Application\Users;
class Table extends \Bluz\Db\Table
{
    public function init()
    {
        $this->linkTo('id', 'UsersRoles', 'userId');
        $this->linkToMany('Roles', 'UsersRoles');
    }
}
Clone this wiki locally