์์๋๋:
table.timestamps()
updated_ts
์ด์ ๋ง๋ค ๋ ํด๋น DDL์ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
์ค์ :
ON UPDATE CURRENT_TIMESTAMP
๋ถ๋ถ์ด ๋๋ฝ๋์์ต๋๋ค. updated_ts
์ด์ ์๋ ์
๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
๋ด๊ฐ ์ค๋ช ํ๋ ๊ตฌ๋ฌธ์ MySQL์์ ์๋ํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง ๊ฐ์ ์ผ๋ง๋ ํธํ๋๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ ์ด๋ postgres ๊ตฌ๋ฌธ์ ๊ทธ๋ค์ง ์ข์ง ์์ต๋๋ค.
http://stackoverflow.com/questions/1035980/update-timestamp-when-row-is-updated-in-postgresql
timestamp
์ด์ .autoUpdate()
๋น๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง๋ง .timestamps()
๋์ฐ๋ฏธ์๋ ์ด๋ฅผ ํ์ฑํํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค.
SQLite3์๋ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ํธ๋ฆฌ๊ฑฐ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. Oracle ๋ฐ mssql์๋ ๋ ๋์ ๊ตฌ๋ฌธ์ด ์๊ฑฐ๋ ์ต์ํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๋๋ฌด ์ข์ ๊ฒ์ ๋๋ค! ํ์ฌ ์ฐ๋ฆฌ๋ ํ์์คํฌํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ฑ ์ฅ์ ์์กดํด์ผ ํฉ๋๋ค. ๋ง๋์?
์ฑ ์ฅ์ ์์กดํ๋ ๋์ ์๋์ผ๋ก datetime-fields(mysql)๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
table.dateTime('created_at').notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP'))
table.dateTime('updated_at').defaultTo(knex.raw('NULL ON UPDATE CURRENT_TIMESTAMP'))
๋๋ updated_at
๋ฅผ ์์ฑ ์๊ฐ์ผ๋ก ๊ธฐ๋ณธ ์ค์ ํ๋ ค๋ ๊ฒฝ์ฐ:
table.dateTime('created_at').notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP'))
table.dateTime('updated_at').notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))
์ฑ ์ฅ์ ์์กดํ๋ ๋์ ์๋์ผ๋ก datetime-fields(mysql)๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
table.dateTime('created_at').notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP')) table.dateTime('updated_at').defaultTo(knex.raw('NULL ON UPDATE CURRENT_TIMESTAMP'))
๊ธฐ๋ณธ๊ฐ์ด null์ธ updated_at์ ๋ํด ๊ฒ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ ํ updated_at์ ๋ํ ํ์ฌ ํ์์คํฌํ๊ฐ ์ฝ์ ๋ฉ๋๋ค.
const UserModel = bookshelf.Model.extend({
tableName: 'users',
hasTimestamps: ['createdAt', 'updatedAt'],
});
์ด ํ ์คํธ๋ ์คํจํฉ๋๋ค.
it('doesntStoreUpdatedAtForCreation', async () => {
// arrange && act
const inserted = await new UserModel().save();
// assert
const retrievedModel = await UserModel.where({ id: inserted.id }).fetch();
assert.notExists(retrievedModel.get('updatedAt'));
});
ํธ์งํ๋ค:
์ ๊ฒฝ ์ฐ์ง ๋ง์ธ์. ๋ชจ๋ธ ์ ์์์ hasTimestamps
๋ฅผ ์์ ํ ์ ๊ฑฐํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์๋ Knex์ Bookshelf ๋ฌธ์ ๋ฅผ ํผํฉํ๊ณ ์์ง๋ง @Ice32 Bookshelf์ ์๋ ํ์์คํฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด ๋ชจ๋ธ ์ ์์์ hasTimestamps: ['createdAt', 'updatedAt']
์ ๊ฑฐํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์ @codeclown์ด ๊ฒ์ํ ์ฝ๋๊ฐ ์์๋๋ก ์๋ํฉ๋๋ค.
๋ด ์๋ฃจ์ :
const Database = use("Database");
/*......*/
table
.timestamp("created_at")
.notNullable()
.defaultTo(Database.raw("CURRENT_TIMESTAMP"));
table
.timestamp("updated_at")
.notNullable()
.defaultTo(
Database.raw("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
);
timestamps()
์ด ์๋ ์
๋ฐ์ดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ๊ฑฐ๋ ๋ฌธ์์์ ์ ๊ณตํ์ง ์๋๋ค๊ณ ๋ช
์์ ์ผ๋ก ์ค๋ช
ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋จ์ํ timestamps()
๋ฉ์๋๊ฐ ์กด์ฌํ๋ ์ค์ํ ์ด์ ๊ฐ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๊ฐ์ ํ์ต๋๋ค.
timestamps()
๋ฉ์๋๋ on update current_timestamp
์ค์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์๊ฒ ์ธ๋ชจ๊ฐ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
timestamps()
์ด ์๋ ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ๊ฑฐ๋ ๋ฌธ์์์ ์ ๊ณตํ์ง ์๋๋ค๊ณ ๋ช ์์ ์ผ๋ก ์ค๋ช ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋จ์ํtimestamps()
๋ฉ์๋๊ฐ ์กด์ฌํ๋ ์ค์ํ ์ด์ ๊ฐ ๊ธฐ๋ฅ์ด๋ผ๊ณ ๊ฐ์ ํ์ต๋๋ค.