Menu

Wednesday, August 7, 2019

[Laravel - Model] เรื่องที่ควรรู้เกี่ยวกับ Attributes ใน Laravel Model
[Laravel - Model] What to Know about Attributes in Laravel Model

นอกจาก Laravel Model จะมี Attributes ที่ชื่อตามชื่อ Column ของ Table ใน Database แล้ว Laravel Model ยังมีตัวแปรและ Function สำหรับการจัดการ Attributes พวกนี้อีกด้วย โดยมีรายละเอียดดังนี้

ตัวแปรสำหรับการจัดการ Attributes ใน Laravel Model ประกอบด้วย
  • $fillable - เป็นตัวแปรที่กำหนดว่า Attributes ใดสามารถแก้ไขค่าได้บ้าง
  • $cast - เป็นตัวแปรที่กำหนดว่า Attributes ใดต้องเปลี่ยนประเภทตัวแปรบ้าง ซึ่งประเภทตัวแปร ประกอบด้วย integer, real, float, double, decimal:<digits>, string, boolean, object, array, collection, date, datetime และ timestamp
  • $dates - เป็นตัวแปรที่กำหนดว่า Attributes ใดต้องถูกเปลี่ยนประเภทเป็น datetime บ้าง ซึ่ง attribute ดังกล่าวจะถูก cast เป็น Carbon instance
  • $hidden - เป็นตัวแปรที่กำหนดว่า Attributes ใดต้องถูกตัดออก เมื่อมีการแปลง Model ไปเป็น JSON
  • $appends - เป็นตัวแปรที่กำหนดว่า Attributes ใดต้องถูกเพิ่มเข้าไป เมื่อมีการแปลง Model ไปเป็น JSON
ตัวอย่างการตั้งค่าตัวแปรที่เกี่ยวข้องกับ attributes
protected $fillable = [
    'title_name',
    'first_name',
    'last_name',
    'is_admin',
    'username',
    'password',
    'login_at',
];
protected $casts = [
    'is_admin' => 'boolean',
];
protected $dates = [
    'login_at',    
];

protected $hidden = [
    'password',
];

protected $appends = ['full_name'];

Function สำหรับการจัดการ Attributes ใน Laravel Model มี 2 ประเภท คือ
  • Accessors - เป็น Function ที่ถูกเรียก เมื่อมีการดึงค่า Attribute นั้นๆ ซึ่งจะมีรูปแบบ function ดังนี้
    public function get{AttributeName}Attribute() {
        return $this->{attribute_name};
    }
    
  • Mutators - เป็น Function ที่ถูกเรียก เมื่อมีการแก้ไขค่า Attribute นั้นๆ ซึ่งจะมีรูปแบบ function ดังนี้
    public function set{AttributeName}Attribute($value) {
        $this->attributes['{attribute_name}'] = $value;
    }
    
โดยที่
  • {AttributeName} เป็นชื่อของ Attribute นั้นๆในรูปแบบของ Camel case
  • {attribute_name} เป็นชื่อของ Attribute เดิม
ตัวอย่างของ Accessors
public function getFullNameAttribute() {
    return "{$this->first_name} {$this->last_name}";
}
ตัวอย่างของ Mutators
public function setFirstNameAttribute($value) {
   $this->attributes['first_name'] = strtolower($value);
}

หมายเหตุ: การเพิ่ม Custom Attributes ใน Laravel Model ก็คือ การเพิ่ม Accessor ของ Attribute ใหม่นั่นเอง

No comments:

Post a Comment