Как присвоить имя коллекции (генерируемой автоматически, когда мы сопоставляем отношения «многие ко многим»)?

#node.js #sails.js #relational-database #relationship

#node.js #sails.js #реляционная база данных #отношения

Вопрос:

Я новичок в Sails js. Я пытался установить связь между клиентом и учетной записью (многие ко многим). Я могу создавать отношения между ними. Объединенная коллекция, которая создается при вставке первой записи, принимает ‘modelname1_attributename_ modelname2_attributename.

Можем ли мы присвоить ей пользовательское имя, поскольку с ней будет легко работать дальше ?.

Я родом из JAVA и спящего режима, и в спящем режиме есть аннотация, которая выполняет нужную мне задачу.

Пожалуйста, помогите мне разобраться с этой проблемой.

Ответ №1:

Невозможно изменить имя автоматически сгенерированной сквозной таблицы, используемой для ассоциаций Sails «многие ко многим». Однако вы можете указать таблицу «через» вручную, вместо использования автоматически сгенерированной, а затем назвать ее как угодно. вы хотите. Из Sails.js документы по сквозным ассоциациям:

Сквозные ассоциации «Многие ко многим» ведут себя так же, как и ассоциации «многие ко многим», за исключением того, что таблица соединений создается автоматически для вас. В сквозной ассоциации «Многие ко многим» вы определяете модель, содержащую два поля, которые соответствуют двум моделям, которые вы будете объединять. При определении ассоциации вы добавите сквозной ключ, чтобы показать, что следует использовать модель, а не таблицу автоматического объединения.

Итак, в вашем случае вы бы создали новую модель, например api/models/CustomerAccount.js , как:

 module.exports = {
  attributes: {
    customer:{
      model:'customer'
    },
    account: {
      model: 'account'
    }
  }
}
  

А затем в Customer.js Account.js файлах модели и используйте through свойство при определении атрибутов ассоциации, например, в Customer :

 accounts: {
  collection: 'customer',
  via: 'customers',
  through: 'customeraccount'
}
  

Как отмечает @zabware в своем ответе, вы можете использовать tableName для дальнейшей настройки имени этой таблицы.

Комментарии:

1. Спасибо за пример, я действительно ценю это! Однако есть небольшая ошибка: ваш второй фрагмент кода должен быть в единственном числе, поэтому вместо accounts: {...} него должно быть account: {...} или, альтернативно, должно быть множественное число (хотя я предпочитаю подход в единственном числе, поэтому в каждой строке таблицы есть «customer» и «account» вместо «customers» и «accounts».