如何将 model 中一个属性拆分显示 [ 求助交流 ]
数据库表中有个字段 extend 内容如下:
{
"type": "xxxxxxx",
"area": "yyyyyy",
"year": "000000",
"star": "aaaaaa",
"state": "bbbb",
"language": "cccccc",
"version": "ddddddd",
"weekday": "一,二,三,四,五,六,日"
}
我想在 ActiveForm 表单中拆分为八个怎么操作。有没有什么好办法,不是要在 model 里增加 8 个属性吧。
共 2 条回复
-
return19931112 回复于 2019-07-15 14:45 举报
提供一个思路:新建一个关联模型
Extend
继承Model
,定义一个数组类型成员变量attributes
,从库中取出数据的时候把字段和值放入attributes
,重写Model
的__get
方法,改成从attributes
获取。/* 实际上是从数组attributes中取出type的值 */ echo $extend->type;
lovelilili 觉得很赞 -
你的extend是一个Json, 你需要在Model中可以直接访问是吧?
我们写了一个包,https://github.com/ethercap/common ,不太好意思,没有来得及写文档。里面有许多实用的代码,其中就有你这种情况的解决办法。
在composer中加上"ethercap/common":"dev-master"
,然后执行composer update
在使用时,这么使用,如果是一个model
<?php use ethercap\common\behaviors\AttrBehavior; class xxModel extends Model { public function behaviors() { return [ 'class' => AttrBehavior::className(), //你的json的数据库字段 'attrKey' => 'extend', 'properties' => [ 'type', 'area', //其它属性.... ], ]; } } ?>
只要这么配好之后,$model->type,$model->area是可以直接取的,$model->save()时也会存入extend的json中,不用担心任何问题,它跟正常$model的属性是一样的,只是存储方式不一样罢了。另外,rules之类也都是可以正常使用的。
chenws1985 , lovelilili 觉得很赞
lovelilili
注册时间:2019-07-04
最后登录:2021-12-01
在线时长:10小时6分
最后登录:2021-12-01
在线时长:10小时6分
- 粉丝1
- 金钱40
- 威望10
- 积分240