2017-11-15 6 views
2

안녕하세요, 나는 많은 관계에 대한 조인 테이블을 만들려고합니다. 나는 다음과 같은 오류가 점점 오전 :조인 테이블에서 데이터베이스 오류를 sequelize

"name": "SequelizeDatabaseError", 
"parent": { 
    "name": "error", 
    "length": 110, 
    "severity": "ERROR", 
    "code": "42P01", 
    "position": "13", 
    "file": "parse_relation.c", 
    "line": "1160", 
    "routine": "parserOpenTable", 
    "sql": "INSERT INTO \"user_routes\" (\"id\",\"userId\",\"routeId\",\"createdAt\",\"updatedAt\") VALUES (DEFAULT,'1','1','2017-11-15 03:57:21.791 +00:00','2017-11-15 03:57:21.791 +00:00') RETURNING *;" 
}, 

의 관계는 많이 있었으나 결국 기본이없는 사용자와 경로에 대한

module.exports = (sequelize, DataTypes) => { 
    const Route = sequelize.define("Route", { 
    open: { 
     type: DataTypes.BOOLEAN, 
     allowNull: true 
    } 
    }); 

    Route.associate = models => { 
    Route.belongsToMany(models.User, { 
     through: "userRoutes", 
     as: "users" 
    }); 
    }; 
    return Route; 
}; 


module.exports = (sequelize, DataTypes) => { 
    var User = sequelize.define("User", { 
    email: DataTypes.TEXT, 
    password: DataTypes.TEXT 
    }); 

    User.associate = models => { 
    User.belongsToMany(models.Route, { 
     through: "userRoutes", 
     as: "routes" 
    }); 
    }; 

    return User; 
}; 

User 사이 Route 마이그레이션 파일입니다. 테이블을 조인 :

"use strict"; 
module.exports = { 
    up: (queryInterface, Sequelize) => { 
    return queryInterface.createTable("user_route", { 
     id: { 
     allowNull: false, 
     autoIncrement: true, 
     primaryKey: true, 
     type: Sequelize.INTEGER 
     }, 
     createdAt: { 
     allowNull: false, 
     type: Sequelize.DATE 
     }, 
     updatedAt: { 
     allowNull: false, 
     type: Sequelize.DATE 
     }, 
     userId: { 
     type: Sequelize.INTEGER, 
     onDelete: "CASCADE", 
     references: { 
      model: "Users", 
      key: "id" 
     } 
     }, 
     routeId: { 
     type: Sequelize.INTEGER, 
     onDelete: "CASCADE", 
     references: { 
      model: "Routes", 
      key: "id" 
     } 
     } 
    }); 
    }, 
    down: (queryInterface, Sequelize) => { 
    return queryInterface.dropTable("user_route"); 
    } 
}; 

내 컨트롤러와 경로는 다음과 같습니다 : 나는 그 길에 게시하려고 할 때

create(req, res) { 
    return UserRoutes.create({ 
     userId: req.body.userId, 
     routeId: req.body.routeId 
    }) 
     .then(userRoute => res.status(201).send(userRoute)) 
     .catch(err => res.status(400).send(err)); 
    }, 



app.post("/api/userRoutes", userRoutesController.create); 

그래서, 나는 게시물의 상단에 오류 메시지가 표시됩니다. 필요한 경우 세부 정보를 제공 할 수 있습니다.

+0

나는 문제를 파악한 것으로 생각합니다. 문제는 sequelize 및 postgres의 명명 규칙입니다. 뭔가 옮겨지고 있지 않습니다. 그것은 많은 관계와 관련이 없습니다. 문제가 해결되면 업데이트하겠습니다. – Leogoesger

답변

1

예상대로이 문제는 조인 테이블과 관련이 없으며 오히려 명명 규칙이 사용됩니다.

User.associate = models => { 
    User.belongsToMany(models.Route, { 
     through: "userRoutes", 
     as: "routes" 
    }); 
    }; 

대신 through: "userRoutes"

, 그것은 user_route해야합니다. 이는 through이 이주 테이블에서 작성된 데이터베이스를 통해 점검하고 있기 때.입니다. 내 표에는 userRoutes이라는 항목이 없습니다. 이상한 일은 그것이 테이블이 존재하지 않는다고 나에게 말하지 않았을 뿐이었다.