【laralve】访问器的灵活使用

简介: 【laralve】访问器的灵活使用

这是素材

数据库:

image.png

源码

<?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;
    }
}

屏幕快照 2022-05-16 上午11.56.50.png屏幕快照 2022-05-16 上午11.57.09.png

相关文章
|
10月前
|
JavaScript 前端开发 API
Vue 3.3 + Vite 4.3 + TypeScript 5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)(四)
Vue 3.3 + Vite 4.3 + TypeScript 5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)(四)
|
26天前
|
开发者 Python
Django模板系统的强大之处:动态渲染与扩展性
【4月更文挑战第15天】Django模板系统是Web开发中的强大工具,支持动态渲染和扩展性。动态渲染包括变量、标签和过滤器的使用,实现内容根据上下文数据动态生成。模板继承和自定义标签则提升了扩展性,减少代码重复,增强可维护性。通过这些特性,Django模板系统助力开发者构建高效、动态的Web应用。
|
1月前
|
缓存 JavaScript 前端开发
Vue的计算属性:让你的代码更简洁高效
Vue的计算属性:让你的代码更简洁高效
16 0
|
10月前
|
JavaScript 前端开发 Java
Vue 3.3 + Vite 4.3 + TypeScript 5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)(一)
Vue 3.3 + Vite 4.3 + TypeScript 5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)(一)
|
5月前
|
JavaScript 前端开发 开发工具
Vue3 + Vite + TypeScript + Element-Plus:从零到一构建企业级后台管理系统(前后端开源)(3)
Vue3 + Vite + TypeScript + Element-Plus:从零到一构建企业级后台管理系统(前后端开源)(3)
|
6月前
|
JavaScript 开发者
TypeScript 对大型项目的管理和维护非常有利。具体应用案例解析
TypeScript 对大型项目的管理和维护非常有利。具体应用案例解析
|
8月前
|
JavaScript 数据安全/隐私保护 网络架构
Vue Router最佳实践,以确保你的Vue.js应用的路由管理清晰、可维护和高效
以下是使用Vue Router的最佳实践,以确保你的Vue.js应用的路由管理清晰、可维护和高效。
113 0
|
9月前
|
资源调度 JavaScript 前端开发
Vue 3 状态管理进阶:使用 Pinia 构建可扩展的应用程序
Vue 3 状态管理进阶:使用 Pinia 构建可扩展的应用程序
154 0
|
10月前
|
JSON 缓存 JavaScript
Vue 3.3 + Vite 4.3 + TypeScript 5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)(二)
Vue 3.3 + Vite 4.3 + TypeScript 5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)(二)