Gorm: Find() ๋ฐ First() ๊ด€๋ จ ๋ฌธ์ œ

์— ๋งŒ๋“  2014๋…„ 11์›” 22์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: go-gorm/gorm

์ด ๋ฌธ์ œ๊ฐ€ ์ฝ”๋“œ๋‚˜ ๋ฌธ์„œ์— ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ Ruby On Rails ๋˜๋Š” PHP-Laravel์„ ๊ธฐ๋ฐ˜์œผ๋กœ GORM์„ ์„ค๊ณ„ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

http://laravel.com/docs/4.2/eloquent

Find()์™€ First()๊ฐ€ Laravel์—์„œ All(), First(), Find(), Get()์˜ 4๊ฐ€์ง€ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์ œ์•ˆ์— ๋ชจ๋‘ ๋™์˜ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹จ์ ์€ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์›ํ•˜๊ณ  ์˜ˆ์ƒํ•  ๋•Œ ํ•˜๋‚˜์˜ ๊ตฌ์กฐ์ฒด(์Šฌ๋ผ์ด์Šค ์—†์Œ)๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ๋” ํŽธ๋ฆฌํ•˜๋”๋ผ๋„ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•ญ์ƒ ์Šฌ๋ผ์ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @pjebs

ActiveRecord์—์„œ ์•„์ด๋””์–ด๋ฅผ ํ›”์ณค์ง€๋งŒ ์ •ํ™•ํžˆ ์ž‘๋™ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

db.First(&User{})   // first user, sort by primary key
db.First(&[]User{}) // find the first user, and put it into the array

db.Find(&User{})   // first user
db.Find(&[]User{}) // find all users

// find records with conditions
db.First(&User{}, 123)
db.First(&User{}, "name = ?", "hello")
db.Find(&User{}, "name = ?", "hello")
db.Where("name = ?", "hello").First(&User{})
db.Where("name = ?", "hello").Find(&User{})

๋ชจ๋“  3 ๋Œ“๊ธ€

์œ ํ˜• ๊ณ ๊ฐ ๊ตฌ์กฐ์ฒด {
ID uint32 gorm:"column:id; primary_key:yes"
Access_token ๋ฌธ์ž์—ด gorm:"column:access_token"
}

func (c ๊ณ ๊ฐ) TableName() ๋ฌธ์ž์—ด {
"๊ณ ๊ฐ"์„ ๋ฐ˜ํ™˜
}

func MyMiddleware(rw http.ResponseWriter, r *http.Request) {
// u := []๊ณ ๊ฐ{}
์œ  := ๊ณ ๊ฐ(&C){}

db, _ := gorm.Open("mysql", "root:@/main")
// db.First(&u, 5)
// db.First(&u)
// db.Find(&u, 5)
db.Find(&u)

}

์ด๊ฒŒ ๋ฌธ์ œ ์•ผ:

์ฒซ ๋ฒˆ์งธ ๋ช…๋ น:
๋ฐ˜ํ™˜๋˜๋Š” ๋ชจ๋“  ๊ฒฐ๊ณผ ์ปฌ๋ ‰์…˜์—์„œ ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ถ”๊ฐ€ WHERE ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€).
ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ &Customer{}๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ด์•ผ ํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์ด ์žˆ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ &u๊ฐ€ ์Šฌ๋ผ์ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. &u๋Š” &[]Customer{}๊ฐ€ ์•„๋‹ˆ๋ผ &Customer{}๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ๋˜ํ•œ ๊ธฐ๋ณธ ํ‚ค์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ ˆ๋Œ€ ํ—ˆ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ FIND ๊ธฐ๋Šฅ์˜ ์šฉ๋„์ž…๋‹ˆ๋‹ค.

์ฐพ๊ธฐ ๋ช…๋ น:
์ฐพ๊ธฐ ๋ช…๋ น์— ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์Šฌ๋ผ์ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•ญ์ƒ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์˜ˆ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฐ’์„ ์›ํ•˜๋ฉด "ALL" ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. db.ALL(&u) ์—ฌ๊ธฐ์„œ &u=[]๊ณ ๊ฐ{}

http://daylerees.com/codebright/eloquent-queries
http://laravel.com/docs/4.2/queries

๋ชจ๋“  ๋ช…๋ น:
์ด๊ฒƒ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ๊ฐ’์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

db.All(&u), ์—ฌ๊ธฐ์„œ &u=[]๊ณ ๊ฐ{}

๋ช…๋ น ๋ฐ›๊ธฐ:
์ด๊ฒƒ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. WHERE ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•œ ํ›„๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๊ฐ’์˜ ARRAY๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @pjebs

ActiveRecord์—์„œ ์•„์ด๋””์–ด๋ฅผ ํ›”์ณค์ง€๋งŒ ์ •ํ™•ํžˆ ์ž‘๋™ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

db.First(&User{})   // first user, sort by primary key
db.First(&[]User{}) // find the first user, and put it into the array

db.Find(&User{})   // first user
db.Find(&[]User{}) // find all users

// find records with conditions
db.First(&User{}, 123)
db.First(&User{}, "name = ?", "hello")
db.Find(&User{}, "name = ?", "hello")
db.Where("name = ?", "hello").First(&User{})
db.Where("name = ?", "hello").Find(&User{})
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰