前言#
吐槽 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 () 包装了下,成功了
<?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);
}