xPDO выборка
Добрый день!
Сущуствует 3 таблицы: users, courses и связующая их usercourses.Можно ли как-то сделать выборку из courses с помощью одного запроса, если прописать связи классов. То есть фактически «пропуская» выборку usercourses:
Сущуствует 3 таблицы: users, courses и связующая их usercourses.
$user = $modx->getObject('modUser', $modx->user->get('id'));
$courses= $user->getMany('Courses');
Может ли modx разрулить данную ситуацию штатными методами?Комментарии: 4
Нет, вы должны в выборке прописать связи. Для того что бы работал $user->getMany, нужно делать производный класс от modUser и к нему присваивать связь к таблицу Courses
Некоторое время поработав с modx'ом, заметил, что он «хорошо подготовлен» к решению различных задач. Мне нужно выбрать все «курсы» пользователя по id через связующую таблицу. Может это можно сделать проще и практичнее чем:
$c = $modx->newQuery('UserCourses')
->where(array(
'user_id' => $modx->user->get('id'),
))
->select(array(
'course_id',
));
$items = $modx->getCollection('UserCourses', $c);
$course_ids = array();
foreach($items as $v) {
array_push($course_ids, $v->course_id);
}
$where = array(
'id:IN' => $course_ids,
);
$courses = $modx->getCollection('Courses', $where);
у вас 2 запроса можно сделать в 1 с помощью join, вот тут хороший пример как раз со связной таблицей
linlex.net/join-xpdo-modx-revolution.html
linlex.net/join-xpdo-modx-revolution.html
Спасибо)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.