没有不值得去解决的问题,也没有不值得去学习的技术!

在 Laravle 6 中,设置 MySQL 字段类型 json 值的重构(基于辅助函数 Arr 实现)

最终生成的结构如下所示,是一个对象,字段名称为:extra
1、现有的代码实现


if ($themeInstallationTask->setting_migrations) {
	$settingMigrations = $themeInstallationTask->setting_migrations;
}
$settingMigrations[] = [
	'file' => $availableVersion . '/' . $this->migrateSettingsDataFile,
	'exec_at' => now()->utc()->toDateTimeString()
];
$themeInstallationTask->setting_migrations = $settingMigrations;
$themeInstallationTask->save();


2、最终生成的结构如下所示,是一个数组,字段名称为:setting_migrations


[
  {
    "file": "v2.0.15-rc.6/migrate_settings_data.php",
    "exec_at": "2022-10-31 09:45:06"
  },
  {
    "file": "v2.0.15-rc.7/migrate_settings_data.php",
    "exec_at": "2022-10-31 09:45:06"
  },
  {
    "file": "v2.0.15/migrate_settings_data.php",
    "exec_at": "2022-10-31 09:45:06"
  },
  {
    "file": "v2.0.17-rc.0/migrate_settings_data.php",
    "exec_at": "2022-10-31 09:45:06"
  }
]


3、决定调整字段的名称为 extra,将 setting_migrations 字段的值纳入其中,代码调整如下,基于辅助函数 Arr 实现。


$extra = $themeInstallationTask->extra;
if (Arr::has($extra, 'setting_migrations')) {
	$settingMigrations = Arr::get($extra, 'setting_migrations');
}
$settingMigrations[] = [
	'file' => $file,
	'exec_at' => now()->utc()->toDateTimeString()
];
Arr::set($extra, 'setting_migrations', $settingMigrations);
$themeInstallationTask->extra = $extra;
$themeInstallationTask->save();


4、最终生成的结构如下所示,是一个对象,字段名称为:extra。如图1
最终生成的结构如下所示,是一个对象,字段名称为:extra
图1


{
  "setting_migrations": [
    {
      "file": "v2.0.15-rc.6/migrate_settings_data.php",
      "exec_at": "2022-10-31 09:45:06"
    },
    {
      "file": "v2.0.15-rc.7/migrate_settings_data.php",
      "exec_at": "2022-10-31 09:45:06"
    },
    {
      "file": "v2.0.15/migrate_settings_data.php",
      "exec_at": "2022-10-31 09:45:06"
    },
    {
      "file": "v2.0.17-rc.0/migrate_settings_data.php",
      "exec_at": "2022-10-31 09:45:06"
    }
  ]
}


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理