前言#
吐槽 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);
}