Laravel9集成Spatie Laravel-Media库10(UUID模型)报错求助
Laravel 9 搭配 Spatie Media Library 10 适配 UUID 主键的正确方案
问题场景
- Laravel 9 项目,用户模型采用 UUID 作为主键
- 集成 Spatie Laravel-Media Library 10,已完成:实现
HasMedia接口、引入对应 Trait、自定义 Media 模型、完成media-library.php配置 - 执行上传关联代码时触发 SQL 错误:
错误核心:媒体库默认将SQLSTATE[22P02]: Invalid text representation: 7 ERREUR: syntaxe en entrée invalide pour l'entier : « 7f3c4d07-1e0b-4897-b3cf-8d8f9fca7296 » (SQL: select max("order_column") as aggregate from "media" where "model_type" = App\Models\User and "model_id" = 7f3c4d07-1e0b-4897-b3cf-8d8f9fca7296)model_id按整数类型处理,与 UUID 字符串类型不兼容
已实施的修复
修改媒体表迁移文件,替换字段生成方法:
修改前代码:
Schema::create('media', function (Blueprint $table) { $table->bigIncrements('id'); $table->morphs('model'); });
修改后代码:
Schema::create('media', function (Blueprint $table) { $table->bigIncrements('id'); $table->uuidMorphs('model'); });
修复后功能正常,需确认该方案的正确性
结论
你的解决方法完全正确,原因如下:
morphs('model')会生成整数类型的model_id字段,适配使用整数主键的模型,和你的 UUID 主键类型冲突,这就是错误的来源。uuidMorphs('model')会生成适配 UUID 的字段:model_id为 CHAR(36)(或对应数据库的 UUID 类型),model_type为字符串类型,完美匹配你的用户模型 UUID 主键。- 这是 Spatie 媒体库适配 UUID 模型的标准方案,只要保证所有关联媒体的模型主键类型与媒体表
model_id字段类型一致,就能彻底避免这类类型不兼容的 SQL 错误。
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

