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

在 Laravel 6 中,MySQL 表中使用 UUID 类型字段的实现

最终生成的 SQL 如下,符合预期
1、数据库迁移实现如下,在 UUID 类型字段上添加了索引。


    public function up()
    {
        $tableName = 'theme_installation';

        Schema::create($tableName, function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->uuid('theme_id')->comment('主题ID')->unique();
            $table->timestamps();
        });

    }


2、执行迁移后,表字段类型为 char(36)。如图1
执行迁移后,表字段类型为 char(36)
图1


CREATE TABLE `theme_installation` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `theme_id` char(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主题ID',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `theme_installation_theme_id_unique` (`theme_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


3、在模型文件的构造方法中设置 UUID 类型的字段值为:Str::orderedUuid(),以利用排序功能。参考:https://itnext.io/laravel-the-mysterious-ordered-uuid-29e7500b4f8


use Illuminate\Support\Str;

    public function __construct(array $attributes = [])
    {
        $attributes['theme_id'] = Str::orderedUuid();
        parent::__construct($attributes);
    }


4、在实际执行模型插入时的实现


$themeInstallation = new ThemeInstallation();
$themeInstallation->wp_theme_id = $wpTheme->id;
$themeInstallation->theme_custom_name = $custom_name;
$themeInstallation->save();


5、执行时报错:Add [theme_id] to fillable property to allow mass assignment on [Modules\\ThemeStoreDB\\Entities\\ThemeInstallation].。如图2
执行时报错:Add [theme_id] to fillable property to allow mass assignment on [Modules\\ThemeStoreDB\\Entities\\ThemeInstallation].
图2


{
    "message": "Add [theme_id] to fillable property to allow mass assignment on [Modules\\ThemeStoreDB\\Entities\\ThemeInstallation].",
    "status_code": 500,
    "debug": {
        "line": 332,
        "file": "E:\\wwwroot\\object\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Model.php",
        "class": "Illuminate\\Database\\Eloquent\\MassAssignmentException",
        "trace": 
    }
}


6、设置 模型的 theme_id 属性可以批量赋值


protected $fillable = ['theme_id'];


7、最终生成的 SQL 如下,符合预期。如图3
最终生成的 SQL 如下,符合预期
图3


insert into
  `table` (
    `theme_custom_name`,
    `role`,
    `processing`,
    `processing_failed`,
    `theme_id`,
    `theme_store_theme_id`,
    `wp_theme_id`,
    `updated_at`,
    `created_at`
  )
values
  (
    '',
    'unpublished',
    1,
    0,
    '966165f6-139a-464d-b2aa-77af8bc32a4a',
    9,
    88,
    '2022-05-25 11:51:06',
    '2022-05-25 11:51: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 来减少垃圾评论。了解你的评论数据如何被处理