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 字段的操作方法。
1. 数据库迁移中定义 JSON 字段
在创建或修改数据表时,使用 $table->json() 方法来定义一个 JSON 类型的字段:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->json('settings'); // 定义 JSON 字段
$table->timestamps();
});
登录后复制
你也可以使用 nullable()->json() 允许该字段为空。
2. 在模型中自动序列化与反序列化
Laravel 会自动将 JSON 字段从数据库中取出时反序列化为 PHP 数组,并在保存时重新序列化。你需要在 Eloquent 模型中将该字段添加到 $casts 属性中:
class User extends Model
{
protected $casts = [
'settings' => 'array', // 将 settings 字段自动转为数组
];
}
登录后复制
使用 'array' 类型 cast 是处理 JSON 字段最常见的方式。Laravel 内部会将其作为 JSON 存储和读取。
3. 读写 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):
标签: mysql php laravel js json access ai 修改器
还木有评论哦,快来抢沙发吧~