Сделайте сложный запрос на книжной полке - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь сделать запрос в dabase с книжной полкой. js.

Вот мои настройки: таблица с именем events со следующими соответствующими столбцами

id,
owner_id,
targetable_id,
targetable_type,

A таблица с именем tickets со следующими соответствующими столбцами:

id,
project_id,
owner_id,
assignee_id: is the id of the user assigned for this ticket

Таблица events и tickets устанавливает соединение через events.targetable_id, что tickets.id

И таблица с именем tickets_users_associations который представляет подписчиков заявки со следующими соответствующими столбцами:

id,
ticket_id,
user_id

Я пытаюсь сделать запрос на книжной полке JS, который возвращает events, где текущий пользователь либо owner_id, либо assigne_id или является последователем указанного c тикета

Я пробовал что-то подобное, но этот метод возвращает мне все события, и когда пользователь не является ни последователем, ни назначенным, ни владельцем, ни объект tickets не является пусто

  let followersTickets = await UsersTickets().forge().where({user_id: req.user.id}).fetchAll({columns: ['ticket_id']});

            // console.log(followersTickets);
            let activities = await Events().forge()
                .query(function (qb) {
                    qb.orderBy('created_at', 'DESC');
                    qb.limit(req.query.limit);
                    qb.offset(req.query.offset);
                })
                .fetchAll({
                    withRelated: [
                        {
                            'owner': function (qb) {
                                qb.select('id', 'first_name', 'last_name');
                            }
                        },
                        'owner.user_profile',
                        'owner.user_profile.attachments',
                        {'tickets': function (qb) {
                                qb.withSchema(req.headers['account-domain']);
                                qb.where({assignee_id: req.user.id}).orWhere({owner_id: req.user.id});
                                qb.whereIn('id', followersTickets.pluck('ticket_id'))
                                qb.select('id', 'title','project_id');
                            }},
                        {'tickets.project': function (qb) {
                                qb.select('id','title', 'slug')
                            }},

                    ],
                    debug: true
                });

Не могли бы вы, ребята, помочь мне с запросом только о событиях, где пользователь является owner_id и назначен или подписан?

...