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;
   39   40   41   42   43   44   45   46   47   48   49