>

나는 api 경로가 sequelize에 중첩 된 열망하는로드가있는 큰 객체를 반환하도록하려고합니다. 내 "레인"모델에는 "위치"모델과 'origin_location_id'및 'destination_location_id'라는 두 가지 연결이 있습니다. 'origin_location_id'및 'destination_location_id'레코드를 모두 반환하려고하지만 'destination_location_id'레코드 만 가져옵니다.

"as"와 "through"를 사용하여 쿼리에서 모델 정의의 연관, 모델 정의의 여러 변형을 역전 시키려고 시도했지만 서버가 아닌 응답을 얻지 못했습니다 ( 오류 코드 또는 오류 설명이 아닌) 오류가 발생하면 로딩 오류가 발생하거나 json 결과에 위치 레코드가 하나만 표시됩니다.

다음은 질의입니다 :

(function(req,res) {
models.Trip.findAll({
  attributes: ['id', 'createdAt'],
  include: [
    { model: models.Customer, attributes: ['id', 'name', 'email', 'address', 'phone'] },
    { model: models.Move, attributes: ['id', 'trip_id'], include: [
      { model: models.Lane,  attributes: ['origin_location_id', 'destination_location_id', 'duration', 'distance'], include: [
        { model: models.Location, attributes: ['id', 'tookan_id', 'name', 'address', 'email', 'phone'] }
      ] }
    ] }
 ],
order:[['createdAt', 'DESC']]}).then(trips => {return res.json(trips)}).catch(err => res.status(422).json(err))})

레인 모델 정의는 다음과 같습니다.

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Lane = sequelize.define('Lane', {
    active: {
      type: DataTypes.TINYINT,
      defaultValue: true },
    customer_id: DataTypes.INTEGER,
    description: DataTypes.TEXT,
    origin_location_id: DataTypes.INTEGER,
    destination_location_id: DataTypes.INTEGER,
    distance: DataTypes.INTEGER,
    duration: DataTypes.INTEGER,
    driver_base_pay: DataTypes.DECIMAL,
    driver_return_pay: DataTypes.DECIMAL,
    tolls: DataTypes.DECIMAL,
    driver_pay_per_minute: DataTypes.DECIMAL,
    driver_pay_per_kilometer: DataTypes.DECIMAL,
    average_drive_speed: DataTypes.DECIMAL
  }, {});
  Lane.associate = function(models) {
    models.Lane.belongsTo(models.Customer, {foreignKey: 'customer_id'});
    models.Lane.belongsTo(models.Location, {foreignKey: 'origin_location_id'});
    models.Lane.belongsTo(models.Location, {foreignKey: 'destination_location_id'});
    models.Lane.hasMany(models.Move, {foreignKey: 'lane_id'});
  };
  return Lane;
};

위치 모델 정의는 다음과 같습니다.

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Location = sequelize.define('Location', {
    tookan_id : DataTypes.INTEGER,
    active: {
      type: DataTypes.TINYINT,
      defaultValue: true },
    customer_id: DataTypes.INTEGER,
    name: DataTypes.TEXT,
    address: DataTypes.TEXT,
    email: DataTypes.TEXT,
    phone: DataTypes.TEXT
  }, {});
  Location.associate = function(models) {
    models.Location.belongsTo(models.Customer, {foreignKey: 'customer_id'});
    models.Location.hasMany(models.Lane, {foreignKey: 'origin_location_id'});
    models.Location.hasMany(models.Lane, {foreignKey: 'destination_location_id'});
  };
  return Location;
};

현재 JSON 결과 구조는 다음과 같습니다 (두 필드에서 Locations와 연관되어 있음에도 불구하고 각 Lane 레코드에 대해 하나의 Location 레코드 만 반환 됨). 와이즈 비즈

그리고 여기에 내가 얻는 오류가 있습니다 :


{
  "id": 27,
  "createdAt": "2018-09-20T12:30:32.000Z",
  "Customer": {
    "id": 1,
    "name": "",
    "email": "",
    "address": "",
    "phone": ""
  },
  "Moves": [{
      "id": 29,
      "trip_id": 27,
      "Lane": {
        "id": 4,
        "origin_location_id": 3,
        "destination_location_id": 1,
        "duration": 1260,
        "distance": 21082,
        "driver_base_pay": "20",
        "driver_return_pay": "3",
        "driver_pay_per_kilometer": "1",
        "average_drive_speed": "18",
        "Location": {
          "id": 1,
          "tookan_id": null,
          "name": "",
          "address": "",
          "email": "",
          "phone": ""
        }
      }
    },
    {
      "id": 26,
      "trip_id": 27,
      "Lane": {
        "id": 3,
        "origin_location_id": 1,
        "destination_location_id": 3,
        "duration": 1260,
        "distance": 21082,
        "driver_base_pay": "20",
        "driver_return_pay": "3",
        "driver_pay_per_kilometer": "1",
        "average_drive_speed": "18",
        "Location": {
          "id": 3,
          "tookan_id": null,
          "name": "",
          "address": "",
          "email": "",
          "phone": ""
        }
      }
    }
  ]
}

내가 이것을 시도 할 때 :

      {
        "name": "SequelizeEagerLoadingError"
        }

(function(req,res) { models.Trip.findAll({ include: [ { model: models.Customer }, { model: models.Move, include: [ { model: models.Lane, include: [ { model: models.Location, as: 'origin_location_id' }, { model: models.Location, as: 'destination_location_id'} ] } ] } ], order:[['createdAt', 'DESC']] }).then(trips => {return res.json(trips)}) .catch(err => res.status(422).json(err)) })
  • 답변 # 1

    지난 한 시간 동안 해왔 던 것과 같은 일을했는데 연관에 "as"문을 추가하고 쿼리에 대응 시키려고하지만 갑자기 아무 이유없이 작동합니다. 한 시간 전에는 작동하지 않았습니다. 내가 한 것은 차선-위치 연결을 와이즈 비즈   그런 다음 일치하도록 쿼리를 업데이트했습니다. 와이즈 비즈

    models.Lane.belongsTo(models.Location, { as: 'pickup', foreignKey: 'origin_location_id'}); models.Lane.belongsTo(models.Location, { as: 'delivery', foreignKey: 'destination_location_id'});

  • 이전 MYSQL 폴링 결과 테이블 가져 오기
  • 다음 python - 그룹화 된 데이터의 RNN에 대해 특정 길이의 시퀀스/배치 생성