vscode 상에서 mysql과 연결 시킨 뒤
test라는 테이블을 만들고 테이블안에 컬럼을 t1이라 정함.
특정 함수가 실행 되었을때 test 테이블 안에 있는 t1컬럼의 value가 1이든 원하는 만큼 증가시켜야함.
test 테이블 조건
id : 값
t1 : 증감 시켜줄 컬럼
처음 시도했던 방법
const { Test } = require("../models");
const T = async (id) => {
await Test.update(
{
where: {id}
},
{
t1: t1 + 1
})
}
우선 Test 테이블을 연결해주고 T 라는 함수가 실행될때 id 를 받아와
update메서드를 통해 where 로 받아온 id와 일치한 놈을 찾아줌.
찾은놈의 t1 을 기존의 t1 + 1 하여 저장.
물론 실패했다.
update메서드의 경우 where절을 뒤에 쓰고 update해줄 부분을 먼저 써야한다함.
const { Test } = require("../models");
const T = async (id) => {
await Test.update(
{
t1: t1 + 1
},
{
where: {id}
},
)
}
이렇게 바꿨지만 역시 실패..
t1에 더해 주는 방식이 잘못 되었나 싶어 다시 수정
(계속 써야하니 짧게 요약해서 보여주겠음)
await Test.update(
{
t1: +1
},
이 역시나 실패..
일단 t1의 값이 바뀌는건 맞으니 update는 맞을거라 확신함...
(이게 문제였지만;)
찾아보니 sequelize에서 증감 update를 할때 increment 를 쓴다는 걸 찾음.
바로 대입 ㄱㄱ
{
increment:(t1:1)
}
{
increment:{t1:1}
}
{
increment:{t1:1}
}
{
increment:[t1:1]
}
.. //
문법이 잘못된 건가 요상하게 계속 바꿔 봤지만 절대 되지않았음..
( 문법이 잘못된 건 맞지만 대충 뭔말알?)
애초에 이런식으로 실행하면 터미널창에 raw 쿼리가 update로 실행이 되는게 아니라 select로 실행되는 걸 늦게 발견함..
뭔가 잘못접근 한거 같아 다시 찾아보니 increment 라는 메서드 자체가 있는 거 였음..
const { Test } = require("../models");
const T = async (id) => {
await Test.increment(
{
t1: 1
},
{
where: {id}
},
)
}
update 메서드를 increment로 바꿔 주니 아주 잘됨..
여기선 1을 예시로 들었지만 2,3,4,5,.. 다 가능함
그리고 받아온 값도 가능
예를 들어
const { Test } = require("../models");
const a = 5
const T = async (id) => {
await Test.increment(
{
t1: a
// t1에 5를 더함
},
{
where: {id}
},
)
}
이상 이거때문에 많은 시간을 허비했지만 이제라도 알게 되었으니 만족..
'Sequelize' 카테고리의 다른 글
Sequelize 쓰는 이유 (0) | 2024.02.15 |
---|---|
sequelize - 일괄 등록,수정 ( bulkCreate bulk update ) (0) | 2023.08.09 |
sequelize include 모델 order (0) | 2023.08.08 |
squelize.sync (0) | 2023.07.25 |