SailsJs/Postgresql — Как создать одностороннюю ассоциацию или отношение «один ко многим» через уникальное поле

У меня есть две модели:

PdfAnnotation.js:

module.exports = {
  tableName: "pdf_annotations",
  primaryKey: "pk_id",

  attributes: {
    pk_id: {
      type: "number",
      autoIncrement: true
    },
    annotation_id: {
      type: "string",
      unique: true,
      required: true,
    },
    comments: {
      collection: "pdfcomments",
      via: "fk_annotation_id"
    }
  }
};

PdfComments.js:


module.exports = {
  tableName: "pdf_comments",
  primaryKey: "pk_id",

  attributes: {
    pk_id: {
      type: "number",
      autoIncrement: true,
    },
    fk_annotation_id: {
      model: "pdfannotations",
    },
    comment_content: {
      type: "string",
    },
  }
};

Когда я запускаю эти коды:

PdfAnnotations.create({
  annotation_id: "test3",
});
PdfComments.create({
  fk_annotation_id: 'test3',
  comment_content: 'test',
});

Я получил эту ошибку:

введите здесь описание изображения

Я следил за документацией: https://sailsjs.com/documentation/concepts/models-and-orm/associations/one-to-many. Разница между моей реализацией и документами заключается в следующем: ограничение, которое я использовал для PdfComments для PdfAnnotations через уникальное поле annotation_id(string) не является основным ключ pk_id(число), так что я получил ошибку.

По некоторым причинам я не хочу использовать annotation_id в качестве первичного ключа (например, его тип — строка)

Я не знаком с Sails и его ORM, надеюсь увидеть вашу помощь.


person K. Tai    schedule 27.05.2020    source источник
comment
fk_annotation_id ожидает фактический идентификатор первичного ключа из модели PdfAnnotations. Таким образом, строка, созданная во время PdfAnnotations.create, id должна быть передана для fk_annotation_id.   -  person khushalbokadey    schedule 30.05.2020
comment
Привет @khushalbokadey, под базой данных я установил внешний ключ (fk_annotation_id) в таблице pdf_comments для ссылки на pdf_annotation через annotation_id, так что есть ли способ установить внешний ключ в ORM с определенным полем, в настоящее время похоже на Sails ORM, связывающий модели/коллекции с первичным ключ по умолчанию. Спасибо   -  person K. Tai    schedule 31.05.2020


Ответы (1)


Попробуйте что-то вроде этого:

const pdfannotation = await PdfAnnotations.create({
  annotation_id: 'test3',
}).fetch();

const pdfcomment = await PdfComments.create({
  fk_annotation_id: pdfannotation.id,
  comment_content: 'test',
});
person khushalbokadey    schedule 31.05.2020