博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel记录一之修改器和访问器
阅读量:7197 次
发布时间:2019-06-29

本文共 1847 字,大约阅读时间需要 6 分钟。

  hot3.png

 

        最近在给前端写API的时候,需要处理前端传过来的附件。由于架构的原因,不能使用本地存储,或者文件存储之类的,更不能使用类似于“fopen”这样的函数来处理(当然,我不是看不起他们)。项目目前是前后端完全分离的,前端采用的是Vue,而后端接口采用的是Laravel的阉割版—lumen框架。

        于是这里附件的存储和传输就采用了阿里云OSS(当然了,这也没有什么技术含量,看看文档什么的就能搞定的)。在前端选择图片之后调取集成了阿里OSS的接口,直接上传并进行云存储。在前端存储之后,回返回一个对象数组,这个对象数字里就含有大量的附件保存的信息,包括数据库存储和阿里OSS的存储信息。于是在我们重新得到这个信息包的时候就很麻烦了,因为没有相应的字段来存储,所以这个时候就需要用到修改器和访问器了(参考)。

       1. 首先我们在Models当中添加要增加的字段

/**     * @var array     */    protected $appends = [        'keyword_attachment',//附件    ];

       2. 然后为 keyword_attachment 属性定义一个访问器 getKeywordAttachmentAttribute(),当 Eloquent 尝试获取 keyword_attachment 的值时,将会自动调用此访问器,返回所需要的附件:

/**     * 获取附件     * @return array     */    public function getKeywordAttachmentAttribute(){        $result = Attachment::where('belong', $id)            ->where('location', 'keyword')            ->get();        return $result;    }

        3.于是接下来,我们就可以在相应的模型中访问 keyword_attachment 属性,直接获取到 keyword_attachment 的值。

            但是我们不想获取到这个keyword_attachment 属性值那又怎么呢?

            4.这儿我们可以通过设置虚拟字段来判断是否加载 keyword_attachment 属性

/**     * @var array     */    protected $appends = [        'keyword_attachment',//附件        'is_get_attachment',//通过设置此虚拟字段来判断是否加载附件    ];

            5.相应的还是给它定义一个访问器,但是为保证和判断此虚拟字段是否加载此属性,因此,我们需要先定义一个修改器 setIsGetAttachmentAttribute() 来设置相应的虚拟字段:

/**     * 通过设置此虚拟字段来判断是否加载 附件     * @param $value     * @return mixed     */    public function setIsGetAttachmentAttribute($value = false)    {        return $this->attributes['is_get_attachment'] = $value;    }

         然后定义访问器 getIsGetAttachmentAttribute() : 

/**     *  通过设置此虚拟字段来判断是否加载 附件     * @return mixed     */    public function getIsGetAttachmentAttribute($value)    {        return isset($this->attributes['is_get_attachment']) ?                $this->attributes['is_get_attachment'] : false;    }

        于是,当我们需要得到 keyword_attachment 的属性的时候,我们就需要给属性 is_get_attachment 赋值为true。

转载于:https://my.oschina.net/Shinsg/blog/1590812

你可能感兴趣的文章
Linux初学(四)
查看>>
为hisiv200交叉编译valgrind3.7
查看>>
Linux添加永久静态路由
查看>>
由ubuntu装好想到的
查看>>
Base-64 字符数组或字符串的长度无效等问题解决方案
查看>>
Python学习--和 Oracle 交互(2)
查看>>
C#多线程JOIN方法初探
查看>>
获取自定义属性的值
查看>>
POJ-2718 Smallest Difference---DFS
查看>>
第二章寄存器知识总结
查看>>
SQL 维护计划(自动删除备份文件)
查看>>
首页列表显示全部问答,完成问答详情页布局
查看>>
VS2010 创建WindowsService服务
查看>>
函数名后 有个 const
查看>>
如何选择Html.RenderPartial和Html.RenderAction
查看>>
算法分析结课总结--回溯算法
查看>>
NYOJ033蛇形填数
查看>>
优化你的数据库索引
查看>>
day11-RabbitMQ fanout广播模式
查看>>
模板层
查看>>