작성
·
227
0
강의를 통해 짜고 있는 프로젝트에 content와 content_category를 있는 구조라 N:M 구조로 짜고 있습니다.
강의에서 hashTag와 post와 같이 N:M 구조로 belongsToMany의 구조로 되어 있습니다.
그래서 content 모델에는 다음과 같이 되어 있고
content_category에서는
다음과 같이 연결되어 있습니다.
하지만, 아래와 같이 belongsToMany 등 관계 커리에서 사용할 수 있는 get**, add** 등의 함수를 사용하고자 했을 때,
와 같이 not is function이 뜹니다.
그래서 ContentCategorys, ContentCategories 등 바꿔봐도 똑같습니다. 왜 그런가요?
답변 2
1
as를 잘못 쓰셨습니다. 저 이름은 as 따라갑니다. getContent_idk 이런 것으로 생성되었을 겁니다. as는 키 이름이 아니라 모델의 별명입니다. 그리고 foreignKey의 대상과 반대로 작성하셔야 합니다.
as도 다 지정했었고, 아래와 같이 했었습니다.
테이블도 한번 지우고 새로 생성하여 진행중입니다.
혹시 죄송하지만 이거 아닌가요..? 계속 not function이라고 뜨는데,,
말씀 해주신대로 as 수정 한 뒤, 테이블 한번더 새로 생성해서 진행했습니다.
getContentCategories() 일 수도 있습니다.
console.log(Content.getContent, Content.getContents, Content.getContentCategory, Content.getContentCategories) 해서 어떤 메서드가 있나 보세요.
네개 모두 undefined이 뜹니다.. 뭔가 혹시나 해서 getContentCategorys도 해봤습니다만 undefinded가 뜹니다. 혹시 셋팅을 따로 해야하는게 있나요..?
지금 db에 Content, ContentCategory, content_category_join 테이블 세 개 모두 있죠? 처음 서버 실행 시 content_category_join을 만드는 sql을 봐야할 것 같습니다.
content 와 content_category로 생성하기 위해
아래와 같이 셋팅하여
content, content_category로 생성 됐습니다.
아래가 content_category_join를 만드는 sql 입니다.
CREATE TABLE IF NOT EXISTS `content_category_join` (`created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, `content_idk` INTEGER , `content_category_idk` INTEGER , PRIMARY KEY (`content_idk`, `content_category_idk`), FOREIGN KEY (`content_idk`) REFERENCES `contents` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`content_category_idk`) REFERENCES `content_category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
0
content 와 content_category로 생성하기 위해
아래와 같이 셋팅하여
content, content_category로 생성 됐습니다.
아래가 content_category_join를 만드는 sql 입니다.
CREATE TABLE IF NOT EXISTS `content_category_join` (`created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, `content_idk` INTEGER , `content_category_idk` INTEGER , PRIMARY KEY (`content_idk`, `content_category_idk`), FOREIGN KEY (`content_idk`) REFERENCES `contents` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`content_category_idk`) REFERENCES `content_category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
contents 생성 sql
CREATE TABLE IF NOT EXISTS `contents` (`id` INTEGER NOT NULL auto_increment , `pd_idk` INTEGER(11) NOT NULL, `state` TINYINT NOT NULL, `img1` VARCHAR(255) NOT NULL, `img2` VARCHAR(255), `img3` VARCHAR(255), `img4` VARCHAR(255), `img5` VARCHAR(255), `img6` VARCHAR(255), `satisfaction` TINYINT NOT NULL, `review_txt1` VARCHAR(255), `review_txt2` VARCHAR(255), `review_txt3` VARCHAR(255), `review_txt4` VARCHAR(255), `review_comment` VARCHAR(500) NOT NULL, `user_id` VARCHAR(45) NOT NULL, `order_product_idk` INTEGER(11) NOT NULL, `height` INTEGER(11) NOT NULL, `size` INTEGER(11) NOT NULL, `is_size_public` TINYINT NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`pd_idk`) REFERENCES `products` (`product_pk`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`order_product_idk`) REFERENCES `order_product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
content_category 생성 sql
CREATE TABLE IF NOT EXISTS `content_category` (`id` INTEGER NOT NULL auto_increment , `name` VARCHAR(45) NOT NULL UNIQUE, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
혹시나 해서 관련 table 생성 sql도 같이 공유 해드립니다.. 답변 주셔서 늘 감사드립니다.
https://stackoverflow.com/questions/49467654/what-methods-mixins-sequelize-adds-to-the-models-when-an-association-is-made
위 글 참고해서 어떤 메서드들이 있는지 찍어보세요.
답변 감사합니다. 그리고 말씀하신 것과 같이 변경했습니다. foreignKey는 헷갈렸던 것 같습니다.
위와 같이 변경 이후에도 죄송하지만
해당 함수가 not function이 뜹니다.