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