amber

amber

FastAdmin 個人記錄 - thinkphp 多對多關聯限制字段顯示

前言#

吐槽 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);
    }
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。