Your Question
关于自定义表名函数 tablename() 问题
The document you expected this should be explained
现在的 tablename() 设置的自定义表名,是在设置了全局前缀表名之后覆盖的表名。如果我想用前缀和自定义表明,那就只能把前缀也放到 tablename() 函数里才行。 像其他的 orm 是会在获取到自定义表名后再加上全局的自定义前缀。 不知道 gorm 为什么要这样设计?有什么特殊的情况吗?如果这样设计,全局的前缀设置就有些局限性了。
例子: 全局的前缀 'tb_' 一个模型 tablename() 自定义表名 'sys_user' 期望用到的表名是 'tb_sys_user' 但是当前的 gorm 用到的表名是 'sys_user'
自定义表名没有和全局前缀关联起来
Expected answer
自定义表名能和全局前缀关联起来
Comment From: JokerCatz
現在的方式其實還不錯,至少有機會拿掉 prefix
而另外一方面,其實 gorm init 時的 NamingStrategy 內有 NameReplacer 能用,所以你可以弄個中介層,在 init() 時去註冊你要的 Replacer,然後再設定 connection 時放入該 Replacer 即可
Comment From: deatil
現在的方式其實還不錯,至少有機會拿掉 prefix 而另外一方面,其實 gorm init 時的 NamingStrategy 內有 NameReplacer 能用,所以你可以弄個中介層,在
init()時去註冊你要的 Replacer,然後再設定 connection 時放入該 Replacer 即可
这种也是全局的更改吧。 现在的情况是想保留全局的前缀,模型设置的表名可以自定义,模型名可以不影响表名。 最主要原因是想保留模型结构体名为自定义的名称而数据表名不会被影响
Comment From: JokerCatz
https://github.com/go-gorm/gorm/blob/2d5cb997ed4d0e8f53fa1662111ad2cb053caf9c/schema/naming.go#L25
我剛剛去挖才發現他的 replacer 是自己寫的,而且用 interface 進行定義,所以你可以自己實現,類似先檢查是否已經有了 prefix ,且和你的 global prefix 是否一樣,如果沒有就再加上或是決定是否替換之類的
Comment From: github-actions[bot]
This issue has been automatically marked as stale because it has been open 360 days with no activity. Remove stale label or comment or this will be closed in 180 days