命名规则 : get + 属性名(驼峰命名法)+ Attr
存在字段
Model User.php
protected function getSexAttr($value) {
$text = [1 => '男', 2 => '女', 3 => '未知'];
return $text[$value];
}
前台循环调用的时候就可以用{volist name="list" id="v" key="k"}{$v.sex}{/volist} 此时的{$v.sex}就对应成男,女,未知。
键不变,值改变。
针对前台需要用到sex值1,2,3同时也要用到文本值男,女,未知的时候
protected function getSexAttr($value) {
$text = [1 => '男', 2 => '女', 3 => '未知'];
return ['val' => $value, 'text' => $text[$value]];
}
前台就可以直接使用了{$v.sex.val}是1,2,3值的格式。{$v.sex.text}就是男,女,未知的格式。
不存在字段
关联其他表的字段构建user表里不存在的字段,其他表就以info表为例
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了,可以省去两表联合查询。
增加了一个属性。
如果又需要用到值,又需要用到文本的情况,就可以用第二个例子的思路了。
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字段了。
不清楚是一对一,一对多,多对多的关系。(这个省去了三表联查?)
原文链接 :原文链接