关联模型操作
查询子模型多对一情况下,不需要include被关联模型也能查出自己外键id多对一模型新增数据时,被关联的外键传值,如果model配置的外键为非必填(?),创建将会报错,多对一不能将外键设置为空持久化数据到数据库时,Prisma对时区的格式没有识别,如moment.js的utcOffset(8)转换成格式为Moment<2024-06-03T22:55:26+08:00>无法识别时区,此时手动添加8个小时来解决问题,moment().add(8, 'hours').toDate()进行保存(不知道有没有副作用);还可以通过设置字段为int方式的时间戳解决,在prisma没有更新修复此bug,创建的项目暂时这么使用了。注意事项
Prisma执行迁移时数据库数据很可能被清除,注意备份数据。备份数据时各个数据库生成的.sql文件代码可能要重新删除存在的表再创建,你应该备份根据字段来进行插入数据,而不是drop表后,再创建表,如果结构改变,需要注意这些问题。 开发阶段,更改字段等操作可以手动在数据库手动操作字段和prisma model匹配,避免执行migrete命令造成数据丢失,更改Prisma model后执行命令npx prisma generate来生成新的client操作update、updateMany更新数据等加入await,(方法最后可直接return,本身是返回promise)
更新数据不报错,数据库数据也没更新,研究各种测试,发现在执行update方法加入await等待执行,就测试更新成功了,但理论等待执行不会影响异步执行,很奇怪。使用后有感(已放弃使用)
Prisma作为一个node中被广泛使用的ORM数据库操作模块,拥有很多比较好用的优点,如对象型方式操作数据库;多对多无需关联中间表就能实现查询和新增数据,查询方式很优雅。
缺点:往往某个缺点更为致命,Prisma官方库有不少网友提了数据库时区问题,有个韩国网友20年提的时区的问题,少了7个小时,刚开始还有还有疑似官方的人员来解答跟进问题,后面始终得不到解决,然后就不管了,后面有很多遇到同样问题的网友跟进这个issue,陆陆续续到现在一直还没解决,估计主要开发人员没有时区时差的国家开发,有网友在这个帖子说可能作者都不知道这个是什么问题,还有不少网友提供了可能的解决办法。
其他node orm连接模块:drizzle,drizzle使用更像写原始sql的写法,但是体验还是比较优雅,drizzle也遇到时区问题,但是通过配置日期字段为drizzle的string类型得到了解决:test_time: timestamp('test_time', {mode: 'string'})。