inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

sequlize 관계 쿼리에서 get**, add** 등 추가로 사용할 수 있는 함수들이 not a function이 뜹니다.

291

admin

작성한 질문수 7

0

강의를 통해 짜고 있는 프로젝트에 content와 content_category를 있는 구조라 N:M 구조로 짜고 있습니다.

강의에서 hashTag와 post와 같이 N:M 구조로 belongsToMany의 구조로 되어 있습니다.

그래서 content 모델에는 다음과 같이 되어 있고

db.Content.belongsToMany(db.ContentCategory
            {through : 'content_category_join'as : 'content_category_idk'foreignKey : 'content_category_idk'}
           )

content_category에서는

db.ContentCategory.belongsToMany(db.Content
            {through : 'content_category_join'as : 'content_idk'foreignKey : 'content_idk'}
           )

다음과 같이 연결되어 있습니다.

하지만, 아래와 같이 belongsToMany 등 관계 커리에서 사용할 수 있는 get**, add** 등의 함수를 사용하고자 했을 때,

와 같이 not is function이 뜹니다.

그래서 ContentCategorys, ContentCategories 등 바꿔봐도 똑같습니다. 왜 그런가요?

nodejs mysql mongodb Sequelize

답변 2

1

제로초(조현영)

as를 잘못 쓰셨습니다. 저 이름은 as 따라갑니다. getContent_idk 이런 것으로 생성되었을 겁니다. as는 키 이름이 아니라 모델의 별명입니다. 그리고 foreignKey의 대상과 반대로 작성하셔야 합니다.

0

admin

답변 감사합니다. 그리고 말씀하신 것과 같이 변경했습니다. foreignKey는 헷갈렸던 것 같습니다. 

db.ContentCategory.belongsToMany(db.Content
            {through : 'content_category_join'foreignKey : 'content_category_idk'}
            )
       }

db.Content.belongsToMany(db.ContentCategory
            {through : 'content_category_join'foreignKey : 'content_idk'}
           )

위와 같이 변경 이후에도 죄송하지만

const test = await Content.getContentCategory()

해당 함수가 not function이 뜹니다.

0

제로초(조현영)

테이블 지웠다가 다시 생성하시고, as 지정해주세요. as의 이름대로 갑니다.

0

admin

db.Content.belongsToMany(db.ContentCategory
            {through : 'content_category_join'foreignKey : 'content_idk'as : 'Content'}
           )

db.ContentCategory.belongsToMany(db.Content
            {through : 'content_category_join'foreignKey : 'content_category_idk'as : 'ContentCategory'}
           )

as도 다 지정했었고, 아래와 같이 했었습니다.

const test = await Content.getContentCategory()

테이블도 한번 지우고 새로 생성하여 진행중입니다.

0

제로초(조현영)

as랑 foreignKey랑 반대 관계여야 합니다. as 두 개를 서로 바꾸세요.

0

admin

const test = await Content.getContentCategory()

혹시 죄송하지만 이거 아닌가요..? 계속 not function이라고 뜨는데,, 

말씀 해주신대로 as 수정 한 뒤, 테이블  한번더 새로 생성해서 진행했습니다.

db.ContentCategory.belongsToMany(db.Content
            {through : 'content_category_join'foreignKey : 'content_category_idk'as : 'Content'}
           )

db.Content.belongsToMany(db.ContentCategory
            {through : 'content_category_join'foreignKey : 'content_idk'as : 'ContentCategory'}
           )

0

제로초(조현영)

getContentCategories() 일 수도 있습니다.
console.log(Content.getContent, Content.getContents, Content.getContentCategory, Content.getContentCategories) 해서 어떤 메서드가 있나 보세요.

0

admin

[]

메서드가 없다고 뜹니다..

0

admin

네개 모두 undefined이 뜹니다.. 뭔가 혹시나 해서 getContentCategorys도 해봤습니다만 undefinded가 뜹니다. 혹시 셋팅을 따로 해야하는게 있나요..?

0

제로초(조현영)

지금 db에 Content, ContentCategory, content_category_join 테이블 세 개 모두 있죠? 처음 서버 실행 시 content_category_join을 만드는 sql을 봐야할 것 같습니다.

0

admin

content 와 content_category로 생성하기 위해

modelName: 'ContentCategory',
tableName: '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

admin

content 와 content_category로 생성하기 위해

modelName: 'ContentCategory',
tableName: '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

admin

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도 같이 공유 해드립니다.. 답변 주셔서 늘 감사드립니다.

0

제로초(조현영)

https://stackoverflow.com/questions/49467654/what-methods-mixins-sequelize-adds-to-the-models-when-an-association-is-made

위 글 참고해서 어떤 메서드들이 있는지 찍어보세요.

리눅스 노드 설치시 패키지

0

162

0

socket.js 에서 referer로부터 roomId를 가져올 때

0

908

3

스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문

0

2286

2

a[title] 질문드립니다

0

379

1

리뉴얼 강의 및 공부 방법

0

583

1

jwt decode

0

1134

1

node.js 교과서 3판 질문드립니다

0

393

1

passport와 jwt

0

437

1

리뉴얼 강의

0

422

2

혹시 Node.js 교과서 3판 이북은 언제 나오나요?

0

356

1

몽고디비 사용자도 MYSQL부분을 들어야 하나요???

0

485

1

sql 쿼리 로그는 어떤 모듈이 작성하나요?

0

507

2

nunjucks res.render('error'); 작동을 안합니다.

0

514

1

질문있습니다.

0

348

1

multer 한글 파일 업로드시 파일명이 깨져요.

1

3538

1

수업자료는 어디있나요?

0

369

1

질문 있습니디

0

240

1

multer 사용시 file 외 name값은 못받나용?

0

420

1

코드 중복 부분 질문드립니다.

0

300

1

api 만드는 이유 질문드립니다.

0

290

1

Strategy의 done에 대해 질문드립니다.

0

368

1

안녕하세요 fs 권한 관련 질문드립니다

0

453

1

시퀄라이즈 연결질문...

0

503

2

res.setHeader vs res.cookie

0

1790

3