关于访问器的一个问题
我使用版本是Laravel Framework 5.7.28
二话不说,先上代码。
getList() 是获取列表方法,然后我定义了一个访问器(访问器的字段是数据表中不存在的)。
/**
* 获取列表
* @param array $where
* @param int $pageSize
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Contracts\Pagination\LengthAwarePaginator
*/
public static function getList($where=[], $pageSize=20){
$list = self::where($where)
->select('id','nickname','phone','type')
->paginate($pageSize);
return $list;
}
/**
* 团队人数
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) string
*/
public function getTeamSizeAttribute()
{
return 'vvvvv';
}
然后我请求下getList()方法,返现返回字段不存在team_size字段。
{
"statusCode": 0,
"message": "success",
"data": {
"current_page": 1,
"data": [
{
"id": 1,
"nickname": "嘿嘿",
"phone": "556588155",
"type": 1
},
{
"id": 2,
"nickname": "。",
"phone": "5669885548",
"type": 2
}
],
"first_page_url": "http://127.0.0.1:8000/getProgramUserList?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://127.0.0.1:8000/getProgramUserList?page=1",
"next_page_url": null,
"path": "http://127.0.0.1:8000/getProgramUserList",
"per_page": 20,
"prev_page_url": null,
"to": 6,
"total": 6
}
}
接下来我添加了 protected $appends = ['team_size']; 好了出现team_size这个字段了。可是模型中其他方法,比如getInfo()也返回了team_size字段,我只想team_size在getList()方法返回。
于是找到了append(),setAppends()这个两个方法。原本我是静态调用,开始改代码。
//C层调用
$list = (new Userinfo)->setAppends(['team_size'])->getList($where,$pageSize);
//M层
public function getList($where=[], $pageSize=20){
$list = self::where($where)
->select('id','nickname','phone','type')
->paginate($pageSize);
return $list;
}
并没有发现返回 team_size 这个字段。。。
于是我开始改M层。先添加 protected $appends = []; 属性。并修改了getList()方法。
public function getList($where=[], $pageSize=20){
$this->appends = ['team_size'];
$list = self::where($where)
->select('id','nickname','phone','type')
->paginate($pageSize);
return $list;
}
看了下源码似乎单单加了append是不会有的,或者你可以虚构一个查询出来的数据叫team_size
这样? :joy: