Как определить и использовать связанную модель в возражении. js - PullRequest
0 голосов
/ 28 апреля 2020

Используя следующий код (, который использует ES6 "type":"module" в package.json), я не могу получить доступ к соответствующей модели Group:

import db from "../connection.js";

import objection from "objection";
const { Model } = objection;


Model.knex(db);

class User extends Model {
  static get tableName() {
    return "users";
  }

  static get relationMappings() {
    return {
      groups: {
        relation: Model.ManyToManyRelation,
        modelClass: Group,
        join: {
          from: "users.id",
          through: {
            from: "users_groups.user_id",
            to: "users_groups.group_id",
          },
          to: "groups.id",
        }
      }
    }
  }
}

class Group extends Model {
  static get tableName() {
    return "groups";
  }
}

Если Я запускаю

const myUser = await User.query().findById(1)

Он выводит:

Пользователь {id: 1, имя: "r", электронная почта: "raj@raj.raj", имя пользователя: "raj",… }

Но я все еще не могу получить доступ к соотношению Group:

myUser.groups

Выходы:

undefined

Что я делаю не так?

1 Ответ

1 голос
/ 28 апреля 2020

Вы должны использовать нетерпеливую загрузку в запросе для загрузки желаемых отношений.

Если вы используете возражение. js v1 :

const myUser = await User.query().eager('groups').findById(1)

И поскольку Возражение. js v2 , eager было переименовано в withGraphFetched:

const myUser = await User.query().withGraphFetched('groups').findById(1)

Extra : Загрузка отношений после создания экземпляра

Вы можете загрузить отношения после создания экземпляра, используя $ relatedQuery . Обратите внимание, что все методы экземпляра начинаются с $:

const myUser = await User.query().findById(1)
const groupsOfMyUser = await myUser.$relatedQuery('groups')
...