author:咔咔php
WeChat:fangkangfk数据库
这是素材数组
数据库:app
源码: 测试
<?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是一个测试方法this
访问,能够查出数据来spa
能够看到上边设置的获取器是数据库字段里边没有的。那么这就是一个自定义的获取器,下来写一个检测的进行测试code
写了一个kaka的获取器排序
而后访问ip
这就说明了,咱们可使用自定义的获取器来修改数据