搜尋

首頁  >  問答  >  主體

laravel 的Eloquent ORM裡$hidden的作用是什麼?

$hidden是做什麼用的?最好能舉個例子說明一下

黄舟黄舟2811 天前555

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑2017-05-16 16:50:27

    文檔寫的很明白了 轉換成數組或 JSON 時隱藏屬性

    有時您可能想要限制能出現在陣列或 JSON 格式的屬性數據,例如密碼欄位。只要在模型裡增加 hidden 屬性即可

    class User extends Model {
    
        protected $hidden = ['password'];
    
    }
    $user = user::find($userId);
    dump($user);//里面是木有password字段的

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-16 16:50:27

    有時您可能想要限制模型陣列或 JSON 表單中包含的屬性,例如密碼。為此,請在您的模型中新增隱藏屬性定義

    雷雷

    回覆
    0
  • PHPz

    PHPz2017-05-16 16:50:27

    可以隱藏Model查詢後結果toArray()後的任意內容,基本用法上面已經有人講了,我來說點平時用到的稍微高級的用法
    1 隱藏某個字段。
    2 你可以隱藏查詢是透過with方法取得的關係。
    3 也可以與$appends連用改變返回資料格式。

    有一個User表還有一個UserInfo表,查詢時需要User的所以欄位+UserInfo中的某個欄位ClomnX。但是又不希望傳回整個UserInfo的資訊。 (當然可以用簡單點的方式在控制器做個查詢中處理,我這裡只是舉個用Model統一處理的方式)

    class User extends Model {
    
        protected $hidden = ['userInfo'];
        
        protected $appedns = ['ClomnX']
        //声明一个关系,user和userInfo是一对一的关系
        public function userInfo()
        {
            return $this->hasOne(UserInfo::class);
        }
        
        public function getClomnXAttribute()
        {
            //判断使用了with方法关联了UserInfo。
            if (isset($this->getRelations()[UserInfo])) {
                return $this->UserInfo->ClomnX;
            } else return null;
        }
    class TestController
    {
        $user = user::with('userInfo')->find($userId);
        dump($user->toArray());//返回中没有UserInfo的数组信息,只有其中一个字段。
    }
    

    這只是簡單的例子,還可以透過這個方法實現更複雜的格式操作。拋磚引玉了。

    回覆
    0
  • 取消回覆