【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

这是素材

数据库:

源码: 


      <?php
      namespace App\Models;
      use Illuminate\Database\Eloquent\Model;
      /**
       * 商品分类
       */
      class GoodsCategory extends Model
      {
         protected  $fillable = ['name', 'category_image'];
         protected $appends = ['levels'];
         public function parent()
          {
             //反向关联
             return $this->belongsTo(GoodsCategory::class);
          }
         public function children() {
             //一对多
             return $this->hasMany(GoodsCategory::class, 'parent_id');
          }
         //定义一个访问器,获取所有祖先类目的ID值
         public function getPossessIdsAttribute()
          {
             //array_filter 将数组中的空值移除
             return array_filter(explode('-', trim($this->possess, '-')));
          }
         //定义一个访问器,获取祖先类目并按层级排序
         public function getAncestorsAttribute()
          {
             return GoodsCategory::query()
                  ->whereIn('id', $this->possess_ids)
                 //按层级排序
                  ->orderBy('level')->get();
          }
         //定义一个访问器,获取以 - 为分隔的所有祖先类目的名称以及当前类目的名称
         public function getFullNameAttribute()
          {
             return $this->ancestors //获取所有祖先类
                  ->pluck('name') //获取祖先类目的name 字段为一个数组
                  ->push($this->name)//获取当前类目的 name 字段加到数组的末尾
                  ->implode(' - '); //用 - 符合将数组的值组成一个字符串
          }
         public function getLevelsAttribute($value) {
             $data = [
                 '0' => '根目录',
                 '1' => '二级',
                 '2' => '三级',
              ];
             // return (is_null($value)) ? $data : $data[$value];
             return (is_null($this->attributes['level'])) ? $data : $data[$this->attributes['level']];
          }
         /**
       * 测试方法
       * @return [type] [description]
       */
         public function test() {
             $category = GoodsCategory::where('id', 105)->first();
             $data = $category->ancestors->toArray();
             return $data;
          }
      }
  
 

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

访问,可以查出数据来

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

写了一个kaka的获取器

 

然后访问

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

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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