สวัสดีครับเพื่อน ๆ จากรอบที่แล้วผมได้มาเล่าเกี่ยวกับเรื่อง การสร้าง model การ connect และการ CRUD เบื่องต้นของ sequelize ไปแล้ว
วันนี้เรามาดู Function ที่คิดว่าทุกๆคนจะได้ใช้แน่นอนกันนะครับ ส่วนใครที่เข้ามาอ่านครั้งแรกก็สามารถกลับไปอ่าน 101 ได้ ที่นี่ เลย
เรามาเริ่มกันที่ function ที่ได้ใช้แน่ๆ นั้นมีอะไรบ้าง นั้นก็คือ MAX MIN AVG SUM และ COUNT นั่นเอง ซึ่งใน sequelize เราสามารถใช้ function เหล่านี้ได้ง่าย ๆ ด้วยตัวย่าง code ด้านล่างเลย โดยเราจะใช้ข้อมูลใน database ที่เราสร้างเมื่อคราวที่แล้วนะครับ
เรามาเริ่มกันที่ max min และ sum กันก่อน เพราะวิธีใช้คล้าย ๆ กัน
await player.max('age'); <= โดย code นี้จะไปหาค่าที่มากที่สุดของ column age ในตาราง player
await player.min('age'); <= โดย code นี้จะไปหาค่าที่น้อยที่สุดของ column age ในตาราง player
await player.sum('age'); <= โดย code นี้จะไปหาผลรวมของ column age ในตาราง player
code ด้านบนเป็นการหาค่าที่ max min หรือ sum อย่างเดียวแต่ถ้าเราอยากได้ข้อมูลอื่นๆ ด้วยเราก็ใช้วิธี order แบบด้านล่างนะครับ
await player.findOne({ order: [['age', 'DESC']] }); <= code ใช้หาค่า max โดยใช้ column age
await player.findOne({ order: [['age']] }); <= code ใช้หาค่า min โดยใช้ column age
ต่อไปเรามาดู count กันบ้าง ซึ่งทาง sequelize มีรูปแบบที่ต่างออกไปตาม code ด้านล่างครับ
await player.count();
code ด้านบนนี้เป็นการหาค่าจำนวน row ใน player table แต่ถ้าอยากได้แบบที่ตรงเงื่อนไขเราก็ใช้ where เข้าไปแบบนี้ครับ
await player.count({
where: {
age: { [Op.gt] : 25 }
}
});
Code นี้คือการที่เราหาจำนวนผู้เล่นที่มีอายุมากกว่า 25 ( Op คือ Operators ของ sequelize ที่เราต้องเรียกมาจาก db.Sequelize ก่อนถึงจะใช้ได้ เพราะงั้นอย่าลืม เรียกก่อนใช้กันนะครับ แล้วถ้าใครอยากรู้ว่า Operators ของ sequelize มีอะไรบ้างไปตามอ่านกันได้ ที่นี่ เลย)
แล้วถ้าเราต้องการการข้อมูลด้วยให้เราใช้ findAndCountAll แทน count นะครับ แบบนี้
await player.findAndCountAll({
where: {
age: { [Op.gt] : 25 }
}
});
เราได้ดูการใช้ max min และ count ที่รูปแบบต่าง ๆ ไปแล้ว แล้วถ้าเราต้องการใช้มันกับ findAll และ fineOne ล่ะเราจะใช่ได้ตามรูปแบบ code ด้านล่างเลยยยย!!
await player.findAll({
attributes: [
[ sequelize.fn('avg', sequelize.col('age')), 'average' ],
[ sequelize.fn('sum', sequelize.col('age')), 'sum' ]
],
});
Code นี้เป็นการหาอายุ avg กับ sum ของ player ออกมา รอบเดียวกัน โดย max min count ก็สามารถใช่รูปแบบเดียวกันได้
แต่ถ้าใครยังมันสามารถเขียนในรูปแบบของ SQL ได้ออกมาแบบนี้ครับ
SELECT AVG(age) As average , SUM(age) As sum
FROM player
อ่าวละก็จบลงไปแล้วกับการใช่ 5 function ที่มีโอกาสได้ใช้แน่นอนของ sequelize ในรูปแบบต่างๆ
หวังว่าเพื่อนๆคงได้ความรู้ไปไม่มากก็น้อยหากผมเข้าใจอะไรผิดก็ฝากเพื่อนๆ ช่วยติชมกันได้นะครับ โดยครั้งหน้าเราจะมาพูดกันถึงเรื่องของ Associations ใช่รูปแบบต่างๆ และการใช้งานพื้นฐานกัน สำหรับวันนี้ขอลาไปก่อนสวัสดีครับ