1. 程式人生 > >tp5框架的獲取器

tp5框架的獲取器

感悟 mode 不存在 eth 小夥伴 lis data tar 一個

  tp5的獲取器功能很強大,一下子就喜歡上了,你可以在模塊裏任意定義表裏不存在的字段,在前臺調用很方便。話不多說直接上demo:

  1.命名規則 get + 屬性名的駝峰命名+ Attr

  直接就能在model裏定義:(本示例在UserModel裏定義的(User.php文件))

  eg1:

  protected function getSexAttr($value) {
    $text = [1 => ‘男‘, 2 => ‘女‘, 3 => ‘未知‘];
    return $text[$value];
  }

  此情景下user表裏是存在sex字段的,sex的值為1,2,3三種情況。這個獲取器的作用在於,後臺獲取user表的list後,sex值仍為1,2,3。前臺循環調用的時候就可以用{volist name="list" id="v" key="k"}{$v.sex}{/volist} 此時的{$v.sex}就對應成男,女,未知。

  2.針對前臺需要用到sex值1,2,3同時也要用到文本值男,女,未知的時候,這個獲取器就有局限性了,此時,小夥伴們很容易想到,定義兩個獲取器,一個存1,2,3另一個存男,女,未知。ok,這個方法是可行的,在這裏簡單介紹一下我想到的方法,定義一個獲取器存二維數組。

  eg2:

  protected function getSexAttr($value) {
    $text = [1 => ‘男‘, 2 => ‘女‘, 3 => ‘未知‘];
    return [‘val‘ => $value, ‘text‘ => $text[$value]];


  }

  這種情況下,前臺就可以直接使用了{$v.sex.val}是1,2,3值的格式。{$v.sex.text}就是男,女,未知的格式。

  看到這裏,相信小夥伴們已經蠢蠢欲動了吧,這還不止呢,接下來介紹一下,定義不存在的字段,映射其他表的字段。就可以應用到項目中了。

  3.關聯其他表的字段構建user表裏不存在的字段,其他表就以info表為例吧

  eg3:

  protected function getHosNameAttr($value, $data) {

    $name = model(‘Info‘)->where(‘info_id‘, $data[‘id‘])->value(‘hos_name‘);

    return $name;
  }

  在user表裏構造了hos_name字段,這個例子很簡單,user表的主鍵id是info表的外鍵info_id,通過這個關系就可以將info裏的字段映射到user表裏,在後臺只查詢user表的數據就能用hos_name了,可以省去兩表聯合查詢

  4.如果又需要用到值,又需要用到文本的情況,就可以用第二個例子的思路了。

  eg4:

  protected function getArchivesAttr($value, $data) {
    $archiveid = model(‘Info‘)->where(‘info_id‘, $data[‘id‘])->value(‘archives_id‘);
    $archivename = model(‘Archives‘)->where(‘id‘, $archiveid)->value(‘name‘);
    return [‘val‘ => $archiveid, ‘text‘ => $archivename];
  }

  此示例,在user表裏構建了archives字段,val存的是info表的archives_id字段,text是archives_id對應的在表archives裏的name字段。省去了三表聯合查詢,這樣在後臺只需要查詢user表就可以在前臺調用archives字段了。

  怎樣,是不是你也不自覺得喜歡上了tp5的獲取器,盡情的使用吧,在使用過程中,相信你會有更多感悟的。

tp5框架的獲取器