Server : nginx/1.20.1
System : Linux iZ2ze9ojcl78uluczwag69Z 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64
User : www ( 1000)
PHP Version : 7.3.28
Disable Function : passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/0531yanglao.com/app/common/model/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/0531yanglao.com/app/common/model/Dictionary.php
<?php
namespace app\common\model;

use think\facade\Cache;
use think\Model;

/**
 * 数据字典模型
 * @author aaron
 *
 */
class Dictionary extends BaseModel
{
    protected $pk = 'did';

    protected static $cacheKey = 'dictionary.cache';

    protected $type = [
        'value' =>  'array',
    ];

    public static function onAfterWrite(Model $model)
    {
       Cache::delete(self::$cacheKey);
    }


    public static function getCacheData()
    {
        $data = Cache::get(self::$cacheKey);
        if(empty($data)) {
            $cache_data = self::getAll();
            foreach ($cache_data as $key=>$item) {
                $values = [];
                foreach ($item['value'] as $val) {
                    $values[$val['key']] = $val['val'];
                }
                $data[$item->did] = $values;
            }
            Cache::set(self::$cacheKey, $data);
        }

        return $data;
    }

    /**
     * @Description 获取对应key值数据
     * @param $did  字典主键
     * @param $value  属性key
     * @param $returnType  返回类型
     * @author Aaron
     * @date 2021/9/8 下午1:09
     */
    public static function getDataAttr($did, $value, $returnType = 'array')
    {
        if(strpos($value, ',')) {
            $value = explode(',', $value);
        }
        $data = self::getCacheData();
        if(empty($data) || !isset($data[$did])) {
            return $returnType == 'array' ? [] : '';
        }
        $data = $data[$did];
        if(is_array($value)) {
            foreach ($value as $key) {
                $return[] = $data[$key] ?? '';
            }
        }else {
            //$return = isset($data[$value]) ? [$data[$value]] : [];
            if($returnType == 'array') {
                $return = isset($data[$value]) ? [$data[$value]] : [];
            }else {
                $return = isset($data[$value]) ? $data[$value] : '';
            }
        }

        return $return;
    }

}