Page 44 - Laravel5_v1
P. 44
Query scopes
้
้
็
้
้
์
Query scopes เปนเทคนิคการรวมเอา query ที มีความซับซอนมาเขียนไวที Models แทนที จะเขียนที Controllers ประโยชนคือ ทําใหโคด
้
้
้
้
้
้
Controller อ่านง่าย สะอาด และยืดหยุนขึ นครบ โดยขางหนาชื อเมธอดจะตองขึ นตนดวยคําว่า scope เสมอ ตัวอย่างเช่น เราตองการหา
ั
่
็
ี
้
้
้
ผูใชที อายุมากกว่า 18 ป แทนที เราจะเขียนโคดเยอะๆ ที Controller กใหมาเขียนที Models ดีกว่า
้
class User extends Model {
public function scopeOver18($query)
{
$date = Carbon::now()->subYears(18);
return $query->where('birth_date','<',$date);
}
}
็
้
ี
้
เวลาเรยกใชที Controller กเขียนแค่นี พอ (ตัดคําว่า scope ออกไป) ลองนําไปใชดูได ้
$userOver18 = User::over18()->get();
การสราง Accessors
้
Accessors หากเรยกง่ายๆอีกชอหนึ งก็คือ getter นั นเอง เปนเมธอดที มีประโยชน คือ เราสามารถสราง attribute ที ไม่ใช่ attribute ใน
ี
้
์
ื
็
้
ื
ื
ื
้
้
ฐานขอมูลได โดยใหกําหนดที Models นั นๆ อาจทําการประมวลผล หรอคํานวณค่าขอมูลจากตาราง เช่น การนําชอและนามสกุลมาเชอม
้
็
้
้
กัน, การคํานวณราคารวมสินคา หากเราไม่กําหนดตารางฐานขอมูล เปนตน
้
้
ํ
้
ขอกาหนดของ Accessor คือ ชื อเมธอดจะตองขึ นตนดวยคําว่า get และลงทายดวยคําว่า Attribute ดังตัวอย่าง
้
้
้
้
class User extends Model {
public function getFullnameAttribute()
{
return $this->firstname . " ". $this->lastname;
}
}
์
เวลาเขาถึงหรอเรยกใชงาน Accessor กใหตัด get และ Attribute ออกไปเหลือแค่ fullname (ตัวพิมพเล็ก) เช่น
ื
้
ี
็
้
้
$user->fullname;