3월 20일 (일) sequelize 테이블 추가 생성 및 테이블 연결, 구현 해야할 내용

남이섬·2022년 3월 19일
0
post-custom-banner

Posts

npx sequelize-cli model:generate --name Posts --attributes user_id:integer,message:text,total_comments:integer

foreignkey 연결

Posts.belongsTo(models.Users, { foreignKey: { name: "user_id", allowNull: false }, onDelete: "CASCADE" });

특정 유저가 쓴 글을 Posts테이블에 저장한다

Posts_comments

npx sequelize-cli model:generate --name Posts_comments --attributes user_id:integer,post_id:integer,comment:text

foreignkey 연결

Posts_comments.belongsTo(models.Users, { foreignKey: { name: "user_id", allowNull: false }, onDelete: "CASCADE" });
Posts_comments.belongsTo(models.Posts, { foreignKey: { name: "post_id", allowNull: false }, onDelete: "CASCADE" });

특정 유저가 쓴 댓글을 Posts_comments 테이블에 저장한다,
같은 post_id의 갯수를 세어 Posts 테블의 total_comments에 전달하여 저장한다

sequelize 테이블 연결

  • hasMany : 1:N, 여러개를 가질 수 있다.(제공하면 이녀석)
  • belongsTo : 1:1 하나만 가질 수 있다.(참조하면 이녀석)
  • targetKey : 정의되어있지 않다면 기본값으로 user 모델의 주요 키를 가리킨다

Users : Posts = 일 : 다

models/Users

    static associate(models) {
      Users.hasMany(models.Posts, { foreignKey: "user_id" })
    }

models/Posts

    static associate(models) {
      Posts.belongsTo(models.Users, { foreignKey: { name: "user_id", allowNull: false }, onDelete: "CASCADE" });
    }

적용

    const postsData = await Posts.findAll({
      attributes: [
        "id",
        "user_id",
        "message",
        "total_comments",
      ],
      include: [
        { model: Users, attributes: ["id"] }
      ]

attributes로 찾고 include로 연결

attributes, include, where

include - 하위 테이블 조인
attributes - 해당 테이블에서 조회 하려는 컬럼 배열

attributes

일부 특성만을 select하려면 attributes 옵션을 사용하면된다

where

  • where 객체를 사용하여 쿼리 내용을 필터링할 수 있다
  • where은 attribute: 값 의 쌍으로 이루어진 객체이며, 값 으로는 비교 연산의 경우 기본 자료형의 값, 그 외의 연산자의 경우 또다른 객체가 올 수 있다

include

include는 어떤 컬럼을 포함할지를 제한해주는 옵션

profile
즐겁게 살자
post-custom-banner

0개의 댓글