Laravel记录一之修改器和访问器
2017-12-16 00:00
302 查看
摘要: 最近在使用lumen写接口时,需要使用到修改器和访问器来处理项目的附件(图片、问答、视频等等)。所以对Laravel的修改器和访问器做一个剖析。
最近在给前端写API的时候,需要处理前端传过来的附件。由于架构的原因,不能使用本地存储,或者文件存储之类的,更不能使用类似于“fopen”这样的函数来处理(当然,我不是看不起他们)。项目目前是前后端完全分离的,前端采用的是Vue,而后端接口采用的是Laravel的阉割版—lumen框架。
于是这里附件的存储和传输就采用了阿里云OSS(当然了,这也没有什么技术含量,看看文档什么的就能搞定的)。在前端选择图片之后调取集成了阿里OSS的接口,直接上传并进行云存储。在前端存储之后,回返回一个对象数组,这个对象数字里就含有大量的附件保存的信息,包括数据库存储和阿里OSS的存储信息。于是在我们重新得到这个信息包的时候就很麻烦了,因为没有相应的字段来存储,所以这个时候就需要用到修改器和访问器了(参考laravel文档)。
1. 首先我们在Models当中添加要增加的字段
2. 然后为 keyword_attachment 属性定义一个访问器 getKeywordAttachmentAttribute(),当 Eloquent 尝试获取 keyword_attachment 的值时,将会自动调用此访问器,返回所需要的附件:
3.于是接下来,我们就可以在相应的模型中访问 keyword_attachment 属性,直接获取到 keyword_attachment 的值。
但是我们不想获取到这个keyword_attachment 属性值那又怎么呢?
4.这儿我们可以通过设置虚拟字段来判断是否加载 keyword_attachment 属性
5.相应的还是给它定义一个访问器,但是为保证和判断此虚拟字段是否加载此属性,因此,我们需要先定义一个修改器 setIsGetAttachmentAttribute() 来设置相应的虚拟字段:
然后定义访问器 getIsGetAttachmentAttribute() :
于是,当我们需要得到 keyword_attachment 的属性的时候,我们就需要给属性 is_get_attachment 赋值为true。
最近在给前端写API的时候,需要处理前端传过来的附件。由于架构的原因,不能使用本地存储,或者文件存储之类的,更不能使用类似于“fopen”这样的函数来处理(当然,我不是看不起他们)。项目目前是前后端完全分离的,前端采用的是Vue,而后端接口采用的是Laravel的阉割版—lumen框架。
于是这里附件的存储和传输就采用了阿里云OSS(当然了,这也没有什么技术含量,看看文档什么的就能搞定的)。在前端选择图片之后调取集成了阿里OSS的接口,直接上传并进行云存储。在前端存储之后,回返回一个对象数组,这个对象数字里就含有大量的附件保存的信息,包括数据库存储和阿里OSS的存储信息。于是在我们重新得到这个信息包的时候就很麻烦了,因为没有相应的字段来存储,所以这个时候就需要用到修改器和访问器了(参考laravel文档)。
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 */ 3ff0 public function getIsGetAttachmentAttribute($value) { return isset($this->attributes['is_get_attachment']) ? $this->attributes['is_get_attachment'] : false; }
于是,当我们需要得到 keyword_attachment 的属性的时候,我们就需要给属性 is_get_attachment 赋值为true。
相关文章推荐
- laravel的修改器和访问器
- ORM的"访问器"&"修改器"实现添加参数到json
- laravel使用记录
- laravel 框架部分细节记录
- laravel 错误与日志,基于Monolog记录并入到mongodb里
- Laravel开发琐碎记录
- Laravel 5 测试用例 记录
- mysql 给检索的条目按照某些字段分组,并合并分组后的多条记录的某列字段的值----laravel
- Laravel 上传excel,读取并写入数据库 (实现自动建表、存记录值
- laravel5.4监控sql并记录在laravel.log中
- laravel 之 Eloquent 模型修改器和序列化
- Laravel框架实现利用中间件进行操作日志记录功能
- laravel容器container 阅读记录
- Laravel框架实现利用监听器进行sql语句记录功能
- Laravel 问题相关记录
- 记录Laravel之行
- Laravel SQL语句记录方式(推荐)
- 【NSL】修改器的改动记录
- Laravel两种记录日志的两种方式
- laravel实现批量更新多条记录的方法示例