簡介
在 Laravel 建置 API 時,經常需要將模型與其關聯轉為陣列或 JSON。 Eloquent 提供便利的方法來執行這類轉換,並可控制哪些屬性會出現在序列化後的表示中。關於 Eloquent 模型與集合更健全的 JSON 序列化方式,請參閱 Eloquent API 資源文件。
模型與陣列
序列化為陣列
要將模型與已載入的關聯轉成陣列,可使用toArray 方法。
此方法會遞迴運作,將所有屬性與所有關聯(包含關聯內的關聯)皆轉為陣列。
attributesToArray 方法可只將模型的屬性轉為陣列,不包含關聯。
toArray。
序列化為 JSON
要將模型轉為 JSON,使用toJson 方法。
toJson 也會遞迴運作,將所有屬性與關聯轉為 JSON。
你也可以指定 PHP 支援的 JSON 編碼選項。
toJson。
關聯
當 Eloquent 模型被轉為 JSON 時,已載入的關聯會自動作為 JSON 物件的屬性包含在內。 Eloquent 的關聯方法名以「駝峰式」定義,但 JSON 屬性會用「蛇底式」。屬性顯示控制
隱藏屬性
有時你想限制模型陣列 / JSON 表示中的某些屬性(例如密碼)。 可為模型使用Hidden 屬性。列在 Hidden 中的屬性不會出現於模型的序列化表示。
要隱藏關聯,只要把關聯方法名稱加入 Eloquent 模型的 Hidden 屬性中即可。
公開屬性
也可以使用Visible 屬性定義模型陣列 / JSON 表示應包含的屬性「白名單」。
不在 Visible 屬性中的所有屬性,在模型被轉為陣列或 JSON 時將被隱藏。
屬性的暫時顯示 / 隱藏
若要為特定的模型實例顯示原本隱藏的屬性,可用makeVisible 或 mergeVisible。
makeVisible 會回傳模型實例本身。
makeHidden 或 mergeHidden。
setVisible 或 setHidden。
追加屬性
在將模型轉為陣列或 JSON 時,有時想加入資料庫中不存在對應欄位的屬性。 為此,請先定義該值的存取器。Appends 屬性。
存取器的 PHP 方法以「駝峰式」定義,但屬性名通常會用「蛇底式」在序列化中呈現。
appends 清單,就會同時出現在模型的陣列與 JSON 表示中。
appends 陣列中的屬性也會遵守模型設定的 visible 與 hidden。
執行期加入
在執行期,可用append 或 mergeAppends 指示模型實例加入額外屬性。
也能透過 setAppends 完全覆寫特定模型實例的追加屬性陣列。
withoutAppends 方法。
日期序列化
自訂預設日期格式
透過覆寫serializeDate 方法,可自訂預設的序列化格式。
此方法不會影響儲存到資料庫的日期格式。