我正在嘗試在我的 API 資源類中有條件地加載一個屬性(不是關系):
'animals' => $this->when(false, AnimalsResource::collection($this->animals), null),
我認為如果條件為假,它不會嘗試加載屬性animals。但是,當我運行它時,出現以下錯誤:
Call to a member function first() on null
如何animals從我的 api 回應 json 中洗掉該屬性null?
uj5u.com熱心網友回復:
PHP 在呼叫函式之前需要知道函式的所有引數。
這樣做AnimalsResource::collection($this->animals)實際上會生成結果,因此它可以使用它來呼叫when.
您可以改為嘗試以下代碼:
'animals' => $this->when(false, function () {
return AnimalsResource::collection($this->animals);
}, null),
在這種情況下,引數是一個函式而不是一個集合,如果第一個引數為真,Laravel 可能會呼叫它
uj5u.com熱心網友回復:
不,它沒有。'when' 方法僅適用于 Api 資源,但您仍在呼叫動物屬性。
你可以設定這樣的東西
'animals' => $this->when(! is_null($this->animals), AnimalsResource::collection($this->animals), null),
請記住,如果您在 'animals' 屬性中執行 SQL 陳述句,則可能會產生 N 1 問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326202.html
