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

    这几天在用GoLang写个东西,期间用到了gorm框架。 在用gorm查询时遇到了一个奇怪的问题:就是这个框架会自动将model的名称转为复数形式。 先来看下具体的报错信息。这里是一个用户model: 查询语句在这里: 执行查询的时候收到了如下的错误信息: 错误信息显示查询的时候没有查预期中user表,反而是查了一个复数形式的users表。 跟踪了下gorm框架的代码,发现这里是获取表名的关键点: 关键在NamingStrategy的ns.SingularTable属性上。查了下资料后知道可以配置中设置相关的属性: 具体是在创建数据库连接时做这个配置。完整的数据库连接配置在这里: 倒数第4行代码是起点。(这是第一种方式) 后来又在gorm的文档中发现了其他两种方式: 为User model 创建一个TableName()函数,大致如下: 这是第二种方式。 在查询时临时指定表名 这是第三种方式。但是可以看出,这个方案并不好,谁有耐心在每次查询时都指定表名啊。 在gorm框架的schema.go的ParseWithSpecialTableName()方法(第123行)可以看到下面的代码: 在这段代码里可以看到设置表名的几种方式和对应的优先级。这里除我们前面提到的三种设置表名的方式外,还提示了第四种方式:通过嵌入式命名规则。可以猜测下第四种方式的使用场景:比如在需要分表的场景下这种方式还是非常便捷的。不过现在对我来说前面三种方式已经完全够用了,第四种具体如何使用我就懒得探索了… 就这样了!END!!!

    [阅读更多...]