Хобрук: Ваш путь к мастерству в программировании

Ассоциации, не работающие для Sequelize

Сначала я запускаю приведенную ниже мутацию, создаю рыбу, я также создал готовую реку. Почему реки и рыбы пусты?

График:

query {
  fishes {
    name
    species
    rivers {
      name
    }
  }
  river(id: 1) {
    name
    fishes { 
    name}
  }
}

# mutation {
#   createFish (name: "Orange-Vall Smallmouth Yellowfish", species: "Labeobarbus aeneus", riverId: 1) {
#     name
#     rivers {
#       name
#     }
#   }
# }

Результаты ниже:

{
  "data": {
    "fishes": [
      {
        "name": "Orange-Vall Smallmouth Yellowfish",
        "species": "Labeobarbus aeneus",
        "rivers": []
      }
    ],
    "river": {
      "name": "Orange River",
      "fishes": []
    }
  }
}

Ниже представлены две модели:

const Fish = sequelize.define('fish', schema);
Fish.associate = models => {
  Fish.belongsToMany(models.River, { through: 'RiverFish' });
};

const River = sequelize.define('river', schema);
River.associate = models => {
  River.belongsToMany(models.Fish, { through: 'RiverFish', as: 'Fishes' });
};

Часть запроса graphql:

River: {
    fishes: river => river.getFishes(),   },   
Fish: {
    rivers: fish => fish.getRivers(),   },

Упорядочить журналы:

    Executing (default): CREATE TABLE IF NOT EXISTS `fishes` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `species` VARCHAR(255) DEFAULT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
Connection has been established successfully.
Executing (default): PRAGMA INDEX_LIST(`fishes`)
Executing (default): CREATE TABLE IF NOT EXISTS `rivers` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `alternative` VARCHAR(255) DEFAULT NULL, `geojson` JSON, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
Executing (default): PRAGMA INDEX_LIST(`rivers`)
Executing (default): CREATE TABLE IF NOT EXISTS `RiverFish` (`createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `fishId` INTEGER NOT NULL REFERENCES `fishes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, `riverId` INTEGER NOT NULL REFERENCES `rivers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`fishId`, `riverId`));
Executing (default): PRAGMA INDEX_LIST(`RiverFish`)
Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_RiverFish_1`)

ИЗМЕНИТЬ

Если я изменю свои модели, результаты будут работать со стороны реки:

River.hasMany(models.Fish, { as: 'Fishes' });
Fish.belongsToMany(models.River, { through: 'RiverFish', as: 'Rivers' });

{
  "data": {
    "fishes": [
      {
        "id": "1",
        "name": "Orange-Vall Smallmouth Yellowfish",
        "species": "Labeobarbus aeneus",
        "rivers": []
      }
    ],
    "river": {
      "name": "Orange River",
      "fishes": [
        {
          "name": "Orange-Vall Smallmouth Yellowfish"
        }
      ]
    },
    "rivers": null
  }

ОБНОВЛЕНИЕ

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

import Fish from './Fish';
import River from "./River";

const models = {
    Fish,
    River
};

Object.keys(models).forEach(name => {
    const model = models[name];
    if (typeof model.associate === 'function') {
        model.associate(models);
    }
});

export {
    Fish, River,
};

  • Вы определили модель RiverFish? 19.06.2018
  • Нет, в документах говорится, что сиквелизация создает модель. 19.06.2018
  • Это работает со стороны реки, поэтому river.getFishes(), если я использую River hasMany(Fish) 19.06.2018
  • Эээ, я никогда не работал с graphql, но, судя по его внешнему виду, нет таблицы RiverFish и данных, которые связывают их, чтобы сформировать отношения «многие ко многим». или вы не включили это в вопрос? 19.06.2018
  • Таблица существует, если я смотрю свои журналы. Я включу это в вопрос 19.06.2018
  • Может ли это быть связанная функция в последнем бите моего вопроса? 19.06.2018
  • Я думаю, что это нормально, или вы можете изменить его на if (model.associate) {}. есть так много вещей, которые я не понимаю, например, где вы получаете результат? это из findOne? . не должно быть fishes и river, должно быть fishes и rivers 19.06.2018
  • Давайте продолжим обсуждение в чате. 19.06.2018

Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..