-
Notifications
You must be signed in to change notification settings - Fork 39
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');
}
}
Acl
Application
Auth
Cache
Common
— Exception
— Collection
— Container
— Helper
— Options
— Singleton
Config
Controller
— Data
— Mapper
—— Crud
—— Rest
— Reflection
Crud
— Crud Table
Db
— Row
— Table
— Relations
— Query
Debug
EventManager
Grid
Http
Layout
Logger
Mailer
Messages
Nil
Proxy
Registry
Request
Response
Router
Session
Translator
Validator
View