模型里使用了关联对象做计算并得到 append 属性,所以默认情况下,对象会自动携带关联对象。主要有两个问题:

  1. 大部分时候使用模型真的只是想取一个简单的列表
  2. 即便需要 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;