【laralve】访问器的灵活使用

举报
原来是咔咔 发表于 2022/03/27 00:43:57 2022/03/27
【摘要】 author:咔咔 WeChat:fangkangfk 这是素材 数据库: 源码:  <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; /** * 商品分类 */class GoodsCategory extends ...

author:咔咔

WeChat:fangkangfk

这是素材

数据库:

源码: 


  
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. /**
  5. * 商品分类
  6. */
  7. class GoodsCategory extends Model
  8. {
  9. protected $fillable = ['name', 'category_image'];
  10. protected $appends = ['levels'];
  11. public function parent()
  12. {
  13. //反向关联
  14. return $this->belongsTo(GoodsCategory::class);
  15. }
  16. public function children() {
  17. //一对多
  18. return $this->hasMany(GoodsCategory::class, 'parent_id');
  19. }
  20. //定义一个访问器,获取所有祖先类目的ID值
  21. public function getPossessIdsAttribute()
  22. {
  23. //array_filter 将数组中的空值移除
  24. return array_filter(explode('-', trim($this->possess, '-')));
  25. }
  26. //定义一个访问器,获取祖先类目并按层级排序
  27. public function getAncestorsAttribute()
  28. {
  29. return GoodsCategory::query()
  30. ->whereIn('id', $this->possess_ids)
  31. //按层级排序
  32. ->orderBy('level')->get();
  33. }
  34. //定义一个访问器,获取以 - 为分隔的所有祖先类目的名称以及当前类目的名称
  35. public function getFullNameAttribute()
  36. {
  37. return $this->ancestors //获取所有祖先类
  38. ->pluck('name') //获取祖先类目的name 字段为一个数组
  39. ->push($this->name)//获取当前类目的 name 字段加到数组的末尾
  40. ->implode(' - '); //用 - 符合将数组的值组成一个字符串
  41. }
  42. public function getLevelsAttribute($value) {
  43. $data = [
  44. '0' => '根目录',
  45. '1' => '二级',
  46. '2' => '三级',
  47. ];
  48. // return (is_null($value)) ? $data : $data[$value];
  49. return (is_null($this->attributes['level'])) ? $data : $data[$this->attributes['level']];
  50. }
  51. /**
  52. * 测试方法
  53. * @return [type] [description]
  54. */
  55. public function test() {
  56. $category = GoodsCategory::where('id', 105)->first();
  57. $data = $category->ancestors->toArray();
  58. return $data;
  59. }
  60. }

我们可以看一下这俩个方法,test是一个测试方法

访问,可以查出数据来

可以看到上边设置的获取器是数据库字段里边没有的。那么这就是一个自定义的获取器,下来写一个检测的进行测试

写了一个kaka的获取器

 

然后访问

这就说明了,我们可以使用自定义的获取器来修改数据 

文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fangkang7/article/details/95219865

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。