# 前言
吐槽 thinkphp 说简单很简单 说麻烦真麻烦
官网讨论里,只有问题却没有答案
不知道为什么多对多关联中 field () 无效,找了半天也没有找到关于多对多的问题
这里以 cards 为例 只显示 id、des、 status
记录解决办法
# 多对多限制字段显示的两种方式
本来用方式一,但是如果主表字段多起起来,一个个显示好麻烦,考虑怎么只限制关联表字段
一开始看别人这么写不成功, $v->getRelation ('cards')->visible (['id','des','status']);
提示错误 Call to a member function visible () on array
打印了 $v->getRelation ('cards'); 发现这是个数组,本来想 foreach 循环 再用 visible
然后想着 collection () 包装了下,成功了
- 参考链接 https://blog.csdn.net/qq_19598963/article/details/113681534
<?php | |
public function index() | |
{ | |
$list = $this->model | |
->with('cards') | |
->select(); | |
foreach ($list as $k => $v){ | |
//TODO 限制数据显示 | |
// 方式一 | |
$v->visible(['id','name','cards.id','cards.des','cards.status']); | |
// 方式二 | |
collection($v->getRelation('cards'))->visible(['id','des','status']); | |
// 同理 hidden 隐藏字段 | |
$v->hidden(['cards.pivot']); | |
} | |
} |
# 多对多 wherePivot 过滤条件
public function cards() | |
{ | |
// 只显示 status 大于 0 的关联信息 | |
return $this->belongsToMany('app\admin\model\PersonalCard','app\admin\model\GroupCard','cardID', 'groupID') | |
->wherePivot('status','>',0); | |
} |