Laravel自5.2起支持Eloquent模型操作JSON字段,需在迁移中使用$json()定义字段,在模型中通过$casts将字段转为array类型,即可像数组一样读写嵌套值,如$user->settings['theme'];支持where('settings->theme', 'dark')等语法查询,还可使用whereJsonContains、whereJsonLength进行高级查询;配合update方法可直接更新JSON子键;通过Accessor和Mutator可自定义格式化与保存逻辑,实现灵活的数据处理。

Laravel 自 5.2 版本起就支持在 Eloquent 模型中直接操作数据库的 JSON 字段,尤其是配合 MySQL 5.7+ 或 PostgreSQL 这类支持原生 JSON 的数据库时,使用体验非常流畅。通过简单的语法,你可以像访问对象属性一样读写 JSON 中的子字段。下面带你一步步掌握 Laravel 中 Eloquent 对 JSON 字段的操作方法。
在创建或修改数据表时,使用 $table->json() 方法来定义一个 JSON 类型的字段:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->json('settings'); // 定义 JSON 字段
$table->timestamps();
});
你也可以使用 nullable()->json() 允许该字段为空。
Laravel 会自动将 JSON 字段从数据库中取出时反序列化为 PHP 数组,并在保存时重新序列化。你需要在 Eloquent 模型中将该字段添加到 $casts 属性中:
class User extends Model
{
protected $casts = [
'settings' => 'array', // 将 settings 字段自动转为数组
];
}
使用 'array' 类型 cast 是处理 JSON 字段最常见的方式。Laravel 内部会将其作为 JSON 存储和读取。
一旦设置了 $casts,你就可以像操作普通数组一样访问嵌套值:
$user = User::find(1); // 获取 JSON 中的某个值 $theme = $user->settings['theme'] ?? 'light'; // 设置值 $user->settings['theme'] = 'dark'; $user->settings['notifications'] = ['email' => true, 'sms' => false]; // 保存 $user->save(); </font>
也支持使用 update() 方法直接更新部分 JSON 字段(适用于 MySQL):
User::where('id', 1)->update([
'settings->theme' => 'dark',
'settings->language' => 'zh-CN'
]);
注意:这种方式只更新 JSON 中的特定键,不会影响其他设置。
Laravel 支持使用箭头语法在查询中访问 JSON 字段:
whereJsonContains 适用于检查 JSON 数组或对象是否包含指定内容,whereJsonLength 可用于判断数组长度。
如果需要更复杂的逻辑,可以定义访问器(Accessor)和修改器(Mutator):
// 访问器:获取格式化后的设置
public function getFormattedSettingsAttribute()
{
return collect($this->settings)->mapWithKeys(function ($value, $key) {
return [ucfirst($key) => $value];
});
}
// 修改器:在保存前统一处理
public function setSettingsAttribute($value)
{
$this->attributes['settings'] = json_encode(array_merge(
$this->settings ?? [],
$value
));
}
这样可以在业务逻辑中灵活扩展 JSON 字段的行为。
基本上就这些。Laravel 的 Eloquent 对 JSON 字段的支持已经非常完善,合理使用 $casts 和数据库原生功能,能让你轻松管理结构化配置、用户偏好等数据。关键是记得在 $casts 中声明类型,并了解不同数据库对 JSON 的支持差异。不复杂但容易忽略细节。
以上就是Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号