Db Relations
Описание
с версии 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'); } }