Как выбрать определенные столбцы c в knex с помощью join? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть таблица комментариев с внешними ключами, которые ссылаются как на автора, так и на пост, где был сделан комментарий. Я пытаюсь получить комментарии следующим образом:

return knex.table('comments').join('users', 'users.id', '=', 'comments.user_id').where('post_id', id);

И я получаю комментарии для указанного идентификатора записи, но я также получаю ВСЕ столбцы из пользовательского столбца, включая их хэши электронной почты и пароля:

[
    {
        "id": 1,
        "user_id": 1,
        "post_id": 1,
        "body": "Some random text.",
        "username": "John Doe",
        "email": "johndoe@example.com",
        "password_hash": "edited"
    },

...
]

Я хочу избавиться от столбцов email и password_ha sh. Добавление pluck () отображает только один столбец. Если я добавлю больше столбцов к вызову .pluck (), я получу массив логических значений. Как я могу сделать так, чтобы он получал только столбец идентификатора из таблицы пользователей и все вещи из таблицы комментариев?

1 Ответ

0 голосов
/ 12 апреля 2020

Я был сильно лишен сна, поэтому по какой-то причине я забыл об объединениях:

getAllComments(id) {
        return knex.select([
            'comments.id',
            'comments.post_id',
            'comments.body',
            'users.username',
        ]).from('comments').innerJoin('users', 'users.id', '=', 'comments.user_id')
            .where('comments.user_id', '=', id);
    },

возвращает:

[
  {
    "id": 1,
    "post_id": 1,
    "body": "Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.",
    "username": "John Doe"
  },

...
]

...