สวัสดีครับเพื่อน ๆ จากรอบที่แล้วผมได้มาเล่าเกี่ยวกับเรื่อง การสร้าง model การ connect และการ CRUD เบื่องต้นของ sequelize ไปแล้ว
วันนี้เรามาดู Function ที่คิดว่าทุกๆคนจะได้ใช้แน่นอนกันนะครับ ส่วนใครที่เข้ามาอ่านครั้งแรกก็สามารถกลับไปอ่าน 101 ได้ ที่นี่ เลย
ผู้เขียน Thapanon S. กีกี้หมายเลข1 – BorntoDev Co., Ltd.
เรามาเริ่มกันที่ 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 ใช่รูปแบบต่างๆ และการใช้งานพื้นฐานกัน สำหรับวันนี้ขอลาไปก่อนสวัสดีครับ