Добавление дубликатов в модель SailsJS с ассоциацией «многие ко многим»

У меня есть две модели, элементы и порядок, которые имеют связь «многие ко многим». То, что я пытался сделать в течение последних 5 часов, - это выяснить, как добавить несколько объектов в заказ, включая дубликаты.

Если элементы уникальны, все работает отлично, но если я попробую что-то вроде этого:

    order.items.add([12, 13, 12, 12]);
    order.save();

Это сэкономит только 12, 13. Дубликаты будут проигнорированы, что не очень хорошо, если вы хотите заказать более одного предмета.

Любые предложения были бы полезны.


person Sunny Patel    schedule 05.07.2015    source источник


Ответы (2)


Ассоциация «многие ко многим» в схеме БД создает связь между любой записью из таблицы и любой записью в другой таблице, конечно, она всегда уникальна, потому что 12 уже имеет связь с этой записью order.

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

Заказ.js

module.exports = {

  attributes: {
    items : {collection: 'OrderItem', via: 'order'}
  }
};

OrderItem.js

module.exports = {

  attributes: {
    order : {model: 'Order'},
    item  : {model: 'Item'}
  }
};

Item.js

module.exports = {

  attributes: {
  }
};

Таким образом, из модели Order вы можете добавить некоторую OrderItem, которая представляет собой модель, представляющую отношение между Order и Item, а OrderItem уникальна с точки зрения Order, хотя элемент в ее записи может быть одним и тем же.

person Andi N. Dirgantara    schedule 06.07.2015
comment
Да, хороший момент, но я пытался этого избежать, потому что паруса автоматически создают таблицу соединений. Я знаю, что если я посмотрю на свою постановку, использующую MySQL, у нее есть таблица OrderItems, созданная Sails для обработки этого. Оказывается, у Sails-disk db, с которым он поставляется, есть эта проблема, но если я использую свои соединения Mongo или MySQL, он работает как шарм. - person Sunny Patel; 06.07.2015
comment
Но проблема в том, что он не может полагаться на базовую/стандартную ассоциацию БД «многие ко многим», поскольку я упоминаю, что 12 уже имеет ассоциацию с order, о которой вы упомянули. Требуется, чтобы something in between был мостом между Order и Item, который мог бы представлять уникальное значение с точки зрения Order. - person Andi N. Dirgantara; 06.07.2015

Один из способов — создать новую модель для поддержания связи «многие ко многим», но другой способ — добавить столбец в вашу модель заказа под названием «Количество» и увеличивать его всякий раз, когда вы снова добавляете тот же элемент.

person Prince Shekhar    schedule 22.07.2015