Добавление вложенных массивов в базу данных Sequelize / PostgreSQL - PullRequest
1 голос
/ 07 июня 2019

Я создаю приложение React с базой данных PostgreSQL, созданной по модели Sequelize. В этой базе данных я хочу хранить массив массивов, содержащих по два числа в каждом, но я не могу понять, как это сделать.

Приложение, которое я создаю, - игра типа змей и лестниц, которая генерирует новую доску для каждой игры. Змеи и лестницы (в моем случае «ямы» и «порталы») отображаются из массива, о котором я вам говорил, пары чисел представляют номера входа и выхода.

Я попытался передать тип данных массива в качестве аргумента самому себе, но, похоже, это не сработало. Есть ли другой способ сделать эту работу?

Набор данных, который я хотел бы сохранить в этом столбце, выглядел бы примерно так:

[
[15, 4], 
[34, 21], 
[42, 19], 
[56, 48], 
[72, 30], 
[82, 63], 
[97, 71]
]

Вот как я пытался добиться этого в моей модели Sequelize:

  pits: {
    type: Sequelize.ARRAY(Sequelize.ARRAY(Sequelize.INTEGER))
  }

Очевидно, что все пошло не так, как я планировал, иначе я бы не стал вас этим беспокоить. Я надеюсь, что кто-то может объяснить, почему это не работает, и помочь мне либо исправить мою базу данных для поддержки данных такого типа, либо (быстро) обойти это другим способом. Я знаю, что это, вероятно, ужасный и худший способ хранения данных, и могу придумать несколько способов решения проблемы, но все они включают переписывание большой части моего кода и требуют больше времени, чем у меня на данный момент.

Обратите внимание, что я кодирую только менее двух месяцев и использую Sequelize / Postgres около 2 недель, поэтому будьте осторожны. Ура!

1 Ответ

0 голосов
/ 09 июня 2019

Попробуйте это:

pits: {
    type: Sequelize.JSONB // allow to save any json
    validate: {
      isValidFormat(value) {
        if (/* add validation if value has correct format (array of array ) */) {
          throw new Error('Bad value');
        }
      },
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...