Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5

Eloquent Mutators และ Accessors ใน Laravel

by
Difficulty:BeginnerLength:ShortLanguages:

Thai (ภาษาไทย) translation by Tarit Srisamai (you can also view the original English article)

ในหัวข้อนี้, เราจะมาลงลึกในเรื่อง mutators และ accessors ของ Eloquent ORM ใน Laravel web framework. หลังจากที่มีการแนะนำไปแล้ว, เราจะใช้วิธีการยกตัวอย่างเพื่อเกิดความเข้าใจในหลักการนี้.

ใน Laravel, mutators และ accessors อนุญาตให้คุณแก้ไขข้อมูลก่อนที่จะถูกบันทึกลงไปและดึงข้อมูลจาก database. อธิบายเพิ่มเติม คือ mutators อนุญาตให้คุณแก้ไขข้อมูลก่อนที่มันจะถูกบันทึกลงในฐานข้อมูล. ในทางกลับกัน, accessor อนุญาตให้คุณแก้ไขข้อมูลหลังจากที่ดึงข้อมูลจากฐานข้อมูล.

ในความเป็นจริง, Laravel model คือ ศูนย์กลางที่คุณสามารถสร้างวิธี mutator และ accessor ได้. และแน่นอน, มันเป็นสิ่งที่ดีที่คุณแก้ไขได้ในจุดเดียว มากกว่าที่จะกระจายกันอยู่ในที่ที่แตกต่างกัน.

สร้าง Accessors และ Mutators ใน Model Class

ตามที่คุณได้คุ้นเคยกับหลักการเบื้องต้นของ mutators และ accessor แล้ว, เราจะไปต่อและแสดงการพัฒนาตัวอย่างด้วยระบบจริง.

เราคิดว่าคุณคงทราบเกี่ยวกับ Eloquent model ใน Laravel, และพวกเราจะใช้ Post model เป็นจุดเริ่มต้นของตัวอย่างต่อไปนี้. ถ้าคุณยังไม่ได้สร้าง Post model, ใช้คำสั่ง artisan ได้เลย.

ไฟล์ model จะสร้างไว้ที่ app/Post.php ซึ่งจะมีหน้าตาเหมือนด้านล่างนี้.

แทนที่ contents ของไฟล์ด้วยโค้ดดังนี้.

เราใช้ --migration option, มันจะสร้างไฟล์ที่เกี่ยวข้องกับฐานข้อมูลขึ้นมา. ในกรณีที่คุณไม่ทราบ, คุณสามารถรันคำสั่งตามนี้ได้เพื่อสร้างตารางในฐานข้อมูล.

เพื่อที่จะดำเนินการต่อไปได้, คุณต้องสร้าง column ชื่อ name และ published_at ในตาราง post. ยังไงก็ตาม เราจะไม่ลงลึกเกี่ยวกับรายละเอียดของหัวข้อ migration, เพราะมันอยู่นอกเหนือประเด็น. ดังนั้นเราจะกลับไปยัง method ที่เราสนใจอยู่.

อย่างแรก ไปดูที่ mutator method.

ตามที่เรากล่าวถึงก่อนหน้านี้, mutators ถูกใช้ในการแก้ไขข้อมูลก่อนที่จะถูกบันทึกลงในฐานข้อมูล. อย่างที่คุณเห็น, syntax ของ mutator method คือ set{attribute-name}Attribute. แน่นอน คุณต้องเปลี่ยนที่ {attribute-name} ด้วย ชื่อ attribute จริงๆ.

method setNameAttribute จะถูกเรียกก่อนที่ค่าของ name attribute ถูกบันทึกลงไปในฐานข้อมูล. ลองทำแบบง่ายก่อน, เราจะใช้แค่ฟังก์ชัน strtolower ซึ่งแปลงหัวข้อของ post เป็นอักษรตัวเล็ก ก่อนที่จะถูกบันทึกลงฐานข้อมูล.

ในวิธีนี้ คุณสามารถสร้าง mutator method ทุก column ของตารางของคุณ. ถัดไป, ลองไปกันที่ accessor method.

ถ้า mutators ถูกใช้ในการแก้ไขข้อมูลก่อนจะถูกบันทึกลงในฐาน แล้วล่ะก็ accessor ก็คือ method ที่ใช้ในการแก้ไขข้อมูลหลังจากที่ข้อมูลถูกดึงออกมาจากฐานข้อมูลแล้ว. syntax ของ accessor จะคล้ายกันกับ mutator ยกเว้นในส่วนเริ่ม คือ จะใช้ get แทนที่ set.

ลองใช้ accessor method ชื่อว่า getNameAttribute กันเลย.

method getNameAttribute จะถูกเรียกหลังจากค่าของ attribute ถูกดึงออกมาจากฐานข้อมูล.ในกรณีนี้ เราใช้ method ucfirst เพื่อปรับค่า post title.

และนั่นคือแนวทางที่คุณควรจะเรียกใช้ accessors ใน models ของคุณ. ถึงตอนนี้ เราได้สร้าง mutator และ accessor methods และเราทดสอบว่ามันจะเกิดอะไรขึ้นในส่วนถัดไป.

Mutators ภาคปฏิบัติ

สร้าง controller ที่ app/Http/Controllers/MutatorController.php ซึ่งเราสามารถทดสอบ method mutator ได้อย่างรวดเร็ว.

คุณต้องสร้างการเชื่อมโยงในการเข้าถึง ที่ route ด้วย ที่ไฟล์ routes/web.php

ที่ method index, เราจะสร้าง post ใหม่ ด้วยการใช้ model Post. โดยจะตั้งค่าของ name เป็น post title จากที่เราใช้ function strtolower ใน method mutator setNameAttribute.

วันที่ใน Mutators

นอกจากที่เราได้คุยกันเกี่ยวกับ mutator ไปก่อนหน้านี้แล้ว, Eloquent model ได้จัด 2 mutators สุดพิเศษมาให้ ซึ่งอนุญาตให้เราแก้ให้ข้อมูลได้. ยกตัวอย่างเช่น, Eloquent model ใน Laravel มาพร้อมกับ property พิเศษ คือ $date ซึ่งอนุญาตให้คุณแปลง columns ที่ได้คุณต้องการไปอยู่ในรูปแบบของ Carbon date ได้อย่างอัตโนมัติ.

ในตอนเริ่มต้นของบทความ เราได้สร้าง Post model, และใช้โค้ดดังนี้.

อย่างที่คุณน่าจะรู้ คือ Laravel จะสร้างวันที่ 2 อันมาให้เราเสมอ คือ created_at และ updated_at, ในการละการ migration ฐานข้อมูล. และมันจะแปลงค่าของทั้งสองอยู่ในรูปแบบ Carbon date instance แทน.

สมมติว่าคุณมีสอง fields นี้แล้วในตาราง ซึ่งคุณอยากจะเก็บในรูปแบบวันที่ไว้, ในกรณีนี้ คุณแค่เพิ่มชื่อ column ใน array $dates.

เหมือนที่คุณได้เห็นแล้วที่โค้ดด้านบน, เราได้เพิ่ม column published_at ใน array $dates, และมั่นใจแล้วว่ามันจะถูกแปลงเป็น Carbon date instance.

Accessors ภาคปฏิบัติ

ในภาคปฏิบัตินี้ เราจะสร้างไฟล์ controller app/Http/Controllers/AccessorController.php ด้วยเนื้อหาดังนี้.

สร้างความเชื่อมโยงที่ route ในไฟล์ routes/web.php เพื่อเข้าถึงมัน.

ที่ method index, เราเคยสร้าง model Post ไว้แล้วในตอนแรก.

ขั้นตอนต่อไป, เรามาดูที่ column name และมันควรจะขึ้นต้นด้วยอักษรตัวใหญ่ อย่างที่เราได้กำหนด column ไว้ใน method getNameAttribute.

ถัดไป เราไปดูค่าที่ column published_at และมันควรจะเป็น date. เนื่องจากว่า Laravel ได้แปลงค่าไปเป็น Carbon instance แล้ว ดังนั้นคุณสามารถใช้ได้ทุก utillity methods จัดการกับมัน. ที่กรณีนี้ เราใช้ method getTimestamp เพื่อแปลง date ไปเป็น timestamp.

และมันก็พาเรามันถึงส่วนสุดท้ายของบทความจนได้!

บทสรุป

วันนี้, เราได้เจาะเข้าไปยังหลักการของ mutators และ accessors ของ Eloquent ORM ใน Laravel. ซึ่งมันเอื้ออำนวยมาให้อย่างดี เพื่อที่จะแก้ไขข้อมูลก่อนที่จะถูกบันทึกและดึงออกมาจากฐานข้อมูล.

สำหรับผู้ที่เพิ่งเริ่มต้นกับ Laravel หรือกำลังมองหาความรู้เพิ่มเติม, เว็บไซต์ หรือ application กับ extensions, เรามีสิ่งเหล่านี้ให้คุณได้ศึกษาใน Envato Marget.

อย่าลักเลที่จะแชร์ความคิดเห็นของคุณ ด้วยการใช้ feed ด้านล่างนี้!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.