Почав дивитися і...
На першій зв'язці застряг (можливо варто було б у код заглянути:) )
Яким чином задається зв'язка, у двох моделях вказується pasport_id (поле із users) і в жодній не вказано до якого поля конектитись в таблиці паспорта, чи я щось не так зрозумів?
Ось як відбувається процес:
1. у нашій базі даних створюємо дві таблиці, для прикладу uc_posts i uc_categories
2. У таблиці uc_posts створюємо поле category_id
3. Створюємо 4 класи:
- Posts\Table
- Posts\Model
- Categories\Table
- Categories\Model
У класі Posts\Table додаємо метод
public function relations(){
return array(
'category'=>array(
'type'=>static::RELATIONS_HAS_ONE,
'table'=>\App\Categories\Table::N,
'myField'=>'category_id',
)
);
}
Тепер коли з бази ми витягнемо пост ми можемо отримати його категорію звертаючись до властивості category
# Вибираємо перший пост
$post = \App\Posts\Table::instance()->fetchOne(1);
# Виводимо заголовок категорії в якому знаходиться пост 1
echo $post->category->title;
'table'=>\App\Passport\Table::N
а чому б не просто вказати модель?)
По-перше отримання моделей відбувається через клас Таблиці
По друге існує ще одна фішка в даній реалізації: джоїни
Для прикладу нам потрібно отримати всіх користувачів які зареєстрували паспорти за останні 24 години
Якщо задамо зв’язки у таблиці користувачів код буде наступний:
$usersTable = \App\Users\Table::instance();
$select = $usersTable->select();
$select->joinWithPassport()->registration_dateGt(time()-24*3600);
$users = $usersTable->fetchAll($select);
На даному етапі у нас моделей ще не існує але зв’язки уже необхідні
# Повертає селект таблиці паспортів
$select->joinWithPassport()
Отже така штука.
Скоріш за все я поміняю назви ключів myField i foreignField для зв’язків один до одного і один до багатьох так як трохи плутається що де вписувати. Це сама найбільша дилема: міняти чи не міняти
Постараюсь найближчим часом зробити скрінкаст або описати реалізацію в документації.
Фактично такий спосіб задання зв’язків класний, так як дозволяє реалізувати вибірки з бази без написання джоінів і без замислення по яких полях треба об’єднувати таблиці і інше.