[新包] 根据 appends 配置的字段映射关系,自动维护需要的 appends - Laravel Eloquent Append Automation

如何使用

https://github.com/terranc/laravel-eloquen...

$ composer require lookfeel/laravel-eloquent-append-automate

场景描述

撸了个包,解决困扰我很久的一个问题,当给定了 $appends 之后,在某些限定了查询字段的查询时(开发API),会因没查询 accessor中涉及的字段而导致错误,而每次在使用的时候再去动态append又很烦,变化时维护起来很心累。所以有了这个 package,使用以后效果如下:

Model:
use Lookfeel\AppendAutomate\Database\Eloquent\Model;

class User extend Modal {
    protected $appends = [
        'first_letter',
        'firstname|lastname' => 'fullname',     // firstname 和 lastname 字段缺一不可,否则不返回 fullname
        'gender' => 'gender_text',  // gender 是一个 int 字段,0:女,1:男
        'status' => 'status_text', // status 是一个 int 字段,0:禁用,1:启用
        'gender_text' => 'access',
        'access' => 'access_text',
    ];
    public function getFirstLetterAttribute()
    {
        return substr($this->firstname, 0, 1);
    }
    public function getFullnameAttribute()
    {
        return $this->firstname . ' ' . $this->lastname;
    }
    public function getGenderTextAttribute()
    {
        return ['女', '男'][$this->gender];
    }
    public function getStatusTextAttribute()
    {
        return ['启用', '禁用'][$this->status];
    }
    public function getAccessAttribute()
    {
        return $this->gender_text === 'Female';
    }
    public function getAccessTextAttribute()
    {
        return $this->access ? 'can' : 'Can not';
    }
}

只需在配置 appends 时给定字段映射 key

Controller
User::select(['id', 'firstname', 'gender'])->firstOrFail();

/***
{
    "id": 1,
    "first_letter": "T",
    "firstname": "Terran",
    "gender": 1,
    "gender_text": "男",
    "access": 1,
    "access_text": "can"
}
*/

方法一:

使用 Lookfeel\AppendAutomate\Database\Eloquent\Model 替换 Illuminate\Database\Eloquent\Model

只需将 Model 继承 Lookfeel\AppendAutomate\Database\Eloquent\Model 即可. Lookfeel\AppendAutomate\Database\Eloquent\Model 继承自 Eloquent

方法二:

使用 Lookfeel\AppendAutomate\AppendAutomateTrait

如果由于某些原因不能继承 Lookfeel\AppendAutomation\Database\Model,那么您可以在已有 Model 中 use Lookfeel\AppendAutomation\AppendAutomateTrait

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

laravel Eloquent 本身就支持这个操作,当你使用

   protected $appends = [
        'fullname',
    ];
    public function getGenderTextAttribute()
    {
        return ['女', '男'][$this->gender];
    }

appends 里面不添加 gender_text 字段 你使用模型获取数据的时候是不会显示这个 gender_text ,当你使用User::find(1)->gender_text 的时候会自动调用 __get 调用魔术方法找你上面的 getGenderTextAttribute()

4年前 评论
overfalse 4年前
terranc (楼主) 4年前
medz 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!