gorm 查询总是将表名转为复数的问题

这几天在用GoLang写个东西,期间用到了gorm框架。

在用gorm查询时遇到了一个奇怪的问题:就是这个框架会自动将model的名称转为复数形式。

先来看下具体的报错信息。这里是一个用户model:

查询语句在这里:

执行查询的时候收到了如下的错误信息:

错误信息显示查询的时候没有查预期中user表,反而是查了一个复数形式的users表。

跟踪了下gorm框架的代码,发现这里是获取表名的关键点:

关键在NamingStrategyns.SingularTable属性上。查了下资料后知道可以配置中设置相关的属性:

具体是在创建数据库连接时做这个配置。完整的数据库连接配置在这里:

倒数第4行代码是起点。(这是第一种方式)

后来又在gorm的文档中发现了其他两种方式:

  1. User model 创建一个TableName()函数,大致如下:

这是第二种方式。

  1. 在查询时临时指定表名

这是第三种方式。但是可以看出,这个方案并不好,谁有耐心在每次查询时都指定表名啊。

在gorm框架的schema.goParseWithSpecialTableName()方法(第123行)可以看到下面的代码:

在这段代码里可以看到设置表名的几种方式和对应的优先级。这里除我们前面提到的三种设置表名的方式外,还提示了第四种方式:通过嵌入式命名规则。可以猜测下第四种方式的使用场景:比如在需要分表的场景下这种方式还是非常便捷的。不过现在对我来说前面三种方式已经完全够用了,第四种具体如何使用我就懒得探索了…

就这样了!END!!!

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据