简介
在使用 Laravel 构建 API 时,经常需要把模型及其关联转换为数组或 JSON。 Eloquent 提供了便捷的方法来完成这些转换,并且可以控制序列化结果中包含哪些属性。关于 Eloquent 模型和集合更稳健的 JSON 序列化方式,请参考 Eloquent API 资源 文档。
模型与数组
序列化为数组
要把模型及其已加载的关联转换为数组,使用toArray 方法。
它是递归的,因此所有属性以及所有关联(包括关联中的关联)都会被转换为数组。
attributesToArray 方法。
toArray 方法。
序列化为 JSON
要把模型转换为 JSON,使用toJson 方法。
与 toArray 一样,toJson 也是递归的,所有属性和关联都会被转换为 JSON。
你还可以传入 PHP 支持的 JSON 编码选项。
toJson 方法。
关联
当 Eloquent 模型被转换为 JSON 时,已加载的关联会以 JSON 对象属性的形式自动包含进来。 另外,Eloquent 的关联方法名是“驼峰式”的,但关联的 JSON 属性会以“蛇形”命名。控制属性的显示
隐藏属性
有时希望在模型的数组或 JSON 表示中隐藏诸如密码之类的属性。 这时可以在模型上使用Hidden 属性。
被列在 Hidden 属性中的字段将不会出现在模型序列化后的结果中。
要隐藏关联,把关联的方法名加入到 Eloquent 模型的 Hidden 属性即可。
显示属性
也可以使用Visible 属性来定义一份“白名单”,只有其中列出的属性才会出现在数组和 JSON 表示中。
不在 Visible 属性列表中的属性在序列化时会被隐藏。
属性的临时显示 / 隐藏
如果需要在某个模型实例上临时显示原本被隐藏的属性,可以使用makeVisible 或 mergeVisible 方法。
makeVisible 方法会返回模型实例。
makeHidden 或 mergeHidden 方法。
setVisible 和 setHidden 方法。
附加属性
在把模型转换为数组或 JSON 时,有时希望加入一些在数据库中并没有对应列的属性。 首先需要定义相应的访问器。Appends 属性。
访问器的 PHP 方法名是“驼峰式”,但属性名通常使用“蛇形”作为其序列化后的形式。
appends 列表后,会同时出现在模型的数组与 JSON 表示中。
appends 数组中的属性同样遵循模型的 visible 与 hidden 设置。
运行时追加
你可以在运行时通过append 或 mergeAppends 方法要求模型实例追加额外属性。
也可以使用 setAppends 方法来覆盖特定模型实例的整个附加属性数组。
withoutAppends 方法。
日期的序列化
自定义默认日期格式
你可以通过重写serializeDate 方法来自定义默认的序列化格式。
此方法不会影响写入数据库时的日期格式。