В Objection. js, в чем вы можете настроить связь с приложениями? - PullRequest
1 голос
/ 03 марта 2020

Я немного растерялся из-за того, что делать RelationsMappings внутри Возражения. js Класс модели.

Я думал, что как только мы настроим связь с моделью внутри Модели, мы получим связанные данные в каждом запросе. Но оказывается, что я по-прежнему сам только свойства модели.

Есть ли что-то еще, что я должен использовать, чтобы получить связанные данные в запросе?

1 Ответ

1 голос
/ 04 марта 2020

Отображения отношений дают модели семантики, как отношения могут быть выбраны, когда они необходимы. Для производительности было бы очень плохо всегда запрашивать все связанные строки в дополнение к строке основной таблицы. Когда вы создаете сопоставления отношений для модели, вам не нужно писать соединения вручную каждый раз, когда вам нужно запросить отношения. Также они включают многие другие функции возражений, для которых требуется информация о том, как соотносятся строки в БД.

Чтобы использовать сопоставления отношений в запросе возражения. js требует, чтобы в каждом запросе вы указывали, какие отношения вы хотите получить с помощью основная строка с методами .withGraphFetched или .withGraphJoined https://vincit.github.io/objection.js/guide/query-examples.html#eager -загрузка

, например:

class Person extends Model {
  static get tableName() {
    return 'persons';
  }

  static get relationMappings() {
    return {
      pets: {
        relation: Model.HasManyRelation,
        modelClass: Animal,
        join: {
          from: 'persons.id',
          to: 'animals.ownerId'
        }
      }
    };
  }
}


const people = await Person.query().withGraphFetched('pets');

// Each person has the `pets` property populated with Animal objects related
// through the `pets` relation.
console.log(people[0].pets[0].name);
console.log(people[0].pets[0] instanceof Animal); // --> true

Отображения также используются при вставке вложенного объекта данные с .insertGraph, чтобы связанные объекты вставлялись в связанные таблицы и ссылки на внешние ключи и т. д. c. автоматически заполняются в соответствии с декларациями отображения отношений.

Есть много других мест, где они используются, но я надеюсь, что это дает общее представление о том, почему они существуют.

...