为 type 等字段「保驾护航」

为type等字段「保驾护航」

写在前面的话

上次发了一篇博文如何优雅地使用帮助类文件 helpers.php,主要是解决type等字段“含义不明”的问题,但是后来想想确实很麻烦,就像朋友们留言的那样,还不如直接在模型中定义,在修改时能够快速定位,所以这篇文章就是上一篇的简化版。

定义Map

//这里是User模型
 const USER_TYPE_UNDER = '1';
 const USER_TYPE_JOIN = '2';
 const USER_TYPE_RUN = '0';

 public static $userTypeMap = [
        self::USER_TYPE_UNDER => '下单人',
        self::USER_TYPE_JOIN => '接单人',
        self::USER_TYPE_RUN  => '管理员',
 ];

追加字段

    /**
     * 追加字段
     */
    protected $appends = ['type_str'];

    public function getTypeStrAttribute()
    {
        return User::$userTypeMap[$this->getAttribute('type')];
    }

到这里我们就完成了,所有的操作都是在User模型中完成的,感觉简单了好多,如果你有其他的想法,欢迎评论

本作品采用《CC 协议》,转载必须注明作者和本文链接
空舟湖上~      ——Jouzeyu
lochpure
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

虽然感觉很厉害的样子,但还是没看懂说的是什么

4年前 评论
犯二青年 4年前

还是可以的,蛮优秀的

4年前 评论

一直都这样,不过我习惯 type_text,,,

4年前 评论

我一直是这么做的, 不过我一般命名为 type_cn

4年前 评论
jcc123

定义相同,使用的时候我更喜欢这样

function getModelMaps($classes)
    {
        $map = [];
        foreach ($classes as $class) {
            $ref = new \ReflectionClass($class);
            $className = $ref->getShortName();
            $constants = $ref->getConstants();
            $staticProperties = $ref->getStaticProperties();
            $onlyMapsProperties = [];
            foreach ($staticProperties as $key => $v) {
                if (str_contains($key, 'Maps')) {
                    $onlyMapsProperties[$key] = $v;
                }
            }
            $map[$className] = array_merge($constants, $onlyMapsProperties);
        }

        return $map;
    }

//获取需要模型的maps,前后端分离也可以传给前端json
$maps=getModelMaps([User::class]);

//前端展示,就不用定义type_str了
$typeStr=$maps['User'][$user->type];
4年前 评论

请问这个封面图是怎么生成的呀?

4年前 评论
lddtime (作者) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!