1.當我們使用getxxxxAttribute通過$appends追加xxxx屬性時,可能會遇到這樣的需要:通過模型某個屬性$this->attributes['某個欄位'],計算出 該xxxx屬性。這樣可能會報錯。原因是在獲取select時沒有獲取該欄位(並不是每次都會使用該資料庫欄位),所以$this->attributes取不出該欄位屬性報錯。所以一定要加判斷:
if (!array_key_exists('某個欄位', $this->attributes)) {
return ' ';
}else{
//計算xxxx屬性
}
- 使用getxxxxAttribute通過$appends追加xxxx屬性時,也可能會遇到這樣的需要:通過查詢資料庫,計算獲取改xxxx屬性。這樣做的坑就是,無論你是否用到該xxxx屬性,都會去查詢資料庫,這無疑在暗中損耗效能(別人的坑,別人用到就追加該屬性,才不管你用不用)。通過網上查詢我的解決:
//在模型中加一個靜態變數用於判斷 public static $withoutAppends = false;//預設要$appends追加屬性 //getxxxxAttribute方法加個判斷 public function gexxxxAttribute(){ if(self::$withoutAppends){ return ' '; } //查資料庫 }
//在控制器或者其他建構函式中注入使用該模型時,就可以控制是否追加該xxxx屬性。 public function __construct(Model $model) { $model::$withoutAppends = true;//不要$appends追加屬性 }
3.$model->setAppends([]);好像也可以。但我laravel5.4試了下,發現沒效果。with(模型)也不知道效果什麼樣。估計那裡不對。
本作品採用《CC 協議》,轉載必須註明作者和本文連結