小可ThinkPHP学堂

?找回密码
?立即注册
搜索
热搜: 活动 交友 discuz
查看: 338|回复: 0
打印 上一主题 下一主题

[ThinkPHP] 字段转换的几种方法

[复制链接]

41

主题

41

帖子

192

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
192
跳转到指定楼层
楼主
发表于 2019-9-11 11:14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我们在设计数据表的时候,经常会用到一些字段是用数字表示,而展现给用户的时候是具体的内容,比如定义一个status字段,1表示正常,0表示售罄,-1表示下架。我们获取到数据表时只能获取到1、0、-1这些字段,需要我们进行手动的转换才行。

方法一、在模板上进行判断,优点是非常万能,基本可以应付所有的情况,缺点就是如果判断条件比较多的时候容易显得比较乱,对代码阅读不友好,因为这种情况的判断基本是在volist标签中的,有时候还在select,checkbox、radio等标签中,层次比较多,但个人还是比较推荐这种写法,简单暴力。

使用TP提供的内置标签,switch或者if都可以。

  1. {switch $status}
  2. ? ? {case 1}正常{/case}
  3. ? ? {case 0}售罄{/case}
  4. ? ? {default /}下架
  5. {/switch}
复制代码
  1. {if ( $statuse == 1)??} 正常
  2. {elseif $name == 0 /}售罄
  3. {else /} 下架
  4. {/if}
复制代码

方法二、使用自定义函数,优点:这种方法更为灵活,定义起来也比较简单,在模板中的使用也非常简单,不用破坏原来的结构层次。缺点:受TP模板函数的限制,一些复杂的转换难以实现,但复杂转换说明你数据库设计的有问题,也是比较推荐这种方式


自定义一个status函数:

  1. function status($status) {
  2. ? ? if($status == 1) {
  3. ? ?? ???$str = "正常";
  4. ? ? }elseif($status ==0) {
  5. ? ?? ???$str = "售罄";
  6. ? ? }else {
  7. ? ?? ???$str = "下架";
  8. ? ? }
  9. ? ? return $str;
  10. }
复制代码

在模板中使用自定义函数就可以了:

  1. {$status|status}
复制代码

方法三:利用TP提供的获取器进行处理,优点:功能很强大,使用很灵活,转换数据和原始数据可以随意使用,配合模型更牛掰。缺点:其实也不算缺点,就是5.1.20版本以后增加了很多功能,感觉还不稳定,建议学习观望,不管你用5.0还是5.1都要注意版本问题,多看看手册。

  1. class Goods extends Model
  2. {
  3. ? ? public function getStatusTextAttr($value,$data)
  4. ? ? {
  5. ? ?? ???$status = [1=>'正常',0=>'售罄',-1=>'下架'];
  6. ? ?? ???return $status[$data['status']];
  7. ? ? }
  8. }
复制代码

By小可老师

2019年9月11日

转载请标明出处

可以加QQ群415216728进行交流。

公众号搜小可ThinkPHP学堂




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表