laravel paginate() 与 makeHidden() 一起使用
模型里使用了关联对象做计算并得到 append 属性,所以默认情况下,对象会自动携带关联对象。主要有两个问题:
- 大部分时候使用模型真的只是想取一个简单的列表
- 即便需要 append 属性,但关联对象本身或者关联对象的关联对象并不需要返回
增加的属性默认是取不到的,需要添加到 append 中来来返回。而当增加属性不需要时,可以使用到 makeHidden()
主动隐藏掉。对应的还有 hidden 以及 makeVisable()
,针对默认隐藏的属性,及设置隐藏属性可见。
当前的问题是,在需要对返回列表分页(paginate()
)时,还需要隐藏不需要的属性,以防关联查询数据过多造成时延。
尝试过拼凑使用,只有 paginate(10)->makeHidden([xx])
时才不会报错。makeHidden()
平常使用会放在 get() 后面,这里与 paginate 基本一致。
拼凑使用的主要问题是,makeHidden 默认返回的是数组,这样会破坏 paginate 的结构,导致分页的信息丢失。尝试过把 makeHidden 放在分页前面,结果报错。
解决方法:将 paginate 结果放起来,之后再去调用 makeHidden。返回数据覆盖 paginate 结果集中的 data 即可。
$paginater = Model::paginate(10);
$paginater->data = $paginater->makeHidden([xxx]);
return $paginater;
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。