如何为尚不存在的元素创建MorphMany关联链接?
解决方案
方案1:新增临时关联标识字段(推荐)
- 给
images表新增两个可空字段:temp_upload_id(字符串/UUID类型)、expired_at(时间戳类型) - 用户进入评价页时,前端生成一个全局唯一的
temp_upload_id存在本地缓存,所有预上传的图片都带上这个标识,存入images表时model_type、model_id留空,填充temp_upload_id和expired_at(可设置为上传后24小时过期) - 用户正式提交评价成功后,拿到新生成的
review记录ID,批量更新所有带当前temp_upload_id的图片,填充model_type为对应Review模型命名空间、model_id为新评价ID,同时清空temp_upload_id和expired_at字段 - 后台加定时任务,每天删除
expired_at已过期且model_id为空的图片,同时清理对应的存储文件,不会产生冗余垃圾数据
方案2:调整多态关联字段约束
- 把
images表的model_type、model_id改为可空,上传预上传图片时这两个字段留空,同时记录上传用户的ID、上传场景标识(比如scene=review_upload) - 提交评价时,筛选出当前用户本次上传的未关联图片,批量绑定到新生成的评价记录上
- 同样加定时任务清理超过24小时未关联的图片即可
额外优化点
- 预上传图片时可以压缩、格式转换后再存,减少存储占用
- 前端可以限制单次评价最多上传的图片数量,避免无效上传
- 提交评价时如果用户主动取消操作,前端可以主动调用接口删除已上传的临时图片
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

