[新包] 根據 appends 配置的欄位對映關係,自動維護需要的 appends - Laravel Eloquent Append Automation

terranc發表於2019-08-01

如何使用

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 協議》,轉載必須註明作者和本文連結

相關文章