不支持特定名称的字段 #27

Closed
opened 2021-06-03 18:55:34 +00:00 by cross1943 · 6 comments
  1. 部分奇怪的数据库字段名的,colMap反转回去后是不对的,而Tag函数又不输出原始数据库字段名,就会造成错误,如"AbC_D_e",或者"_xxxx"这类的字段名
  2. 模板函数tag写死使用xorm:"..."起头,不支持自定义tagName
1. 部分奇怪的数据库字段名的,colMap反转回去后是不对的,而Tag函数又不输出原始数据库字段名,就会造成错误,如"AbC_D_e",或者"_xxxx"这类的字段名 2. 模板函数tag写死使用xorm:"..."起头,不支持自定义tagName
Owner

You can use xorm:"'column_name'" to customerize the column name

You can use `xorm:"'column_name'"` to customerize the column name
Author

是template问题啊,老哥。

xorm.io\reverse@v0.1.1\language\golang.go:236

	res = append(res, nstr)
	if len(res) > 0 {
		return template.HTML(fmt.Sprintf(`xorm:"%s"`, strings.Join(res, " ")))
	}
是template问题啊,老哥。 xorm.io\reverse@v0.1.1\language\golang.go:236 ```go res = append(res, nstr) if len(res) > 0 { return template.HTML(fmt.Sprintf(`xorm:"%s"`, strings.Join(res, " "))) } ```
Contributor

image

这个 template 就没给 xorm:"" 这个tag 留什么定制修改的余地。

至少给个 xorm:"{{Tags $table $col}}" 才有调整的空间吧。

![image](/attachments/b9cedf7f-c620-4879-b3dd-e034d7d04710) 这个 template 就没给 `xorm:""` 这个tag 留什么定制修改的余地。 至少给个 `xorm:"{{Tags $table $col}}"` 才有调整的空间吧。
4.3 KiB
Contributor

尝试做了一个 workaround

diff --git a/language/golang.go b/language/golang.go
index f357caa..305070f 100644
--- a/language/golang.go
+++ b/language/golang.go
@@ -235,7 +235,7 @@ func tag(table *schemas.Table, col *schemas.Column) template.HTML {
        }
        res = append(res, nstr)
        if len(res) > 0 {
-               return template.HTML(fmt.Sprintf(`xorm:"%s"`, strings.Join(res, " ")))
+               return template.HTML(fmt.Sprintf(`xorm:"%s %s"`, col.Name, strings.Join(res, " ")))
        }
        return ""
 }

explicit is better than implicit

尝试做了一个 workaround ```diff diff --git a/language/golang.go b/language/golang.go index f357caa..305070f 100644 --- a/language/golang.go +++ b/language/golang.go @@ -235,7 +235,7 @@ func tag(table *schemas.Table, col *schemas.Column) template.HTML { } res = append(res, nstr) if len(res) > 0 { - return template.HTML(fmt.Sprintf(`xorm:"%s"`, strings.Join(res, " "))) + return template.HTML(fmt.Sprintf(`xorm:"%s %s"`, col.Name, strings.Join(res, " "))) } return "" } ``` > explicit is better than implicit
Contributor

还有个差不多是同类的问题。

yaml 提供了 column_mappertable_mapper 两个选项让用户自己定义怎么把名字映射进 go ,但修改这两个配置需要在代码里改 engine.SetColumnMapperenigne.SetTableMapper ,不然就要改 template,很麻烦还容易人为出错。

直接在默认 template 里,显式映射每个字段到 column,显式映射每个 struct 到 table,这样不是更好吗?

@lunny

还有个差不多是同类的问题。 yaml 提供了 `column_mapper` 和 `table_mapper` 两个选项让用户自己定义怎么把名字映射进 go ,但修改这两个配置需要在代码里改 `engine.SetColumnMapper` 和 `enigne.SetTableMapper` ,不然就要改 template,很麻烦还容易人为出错。 直接在默认 template 里,显式映射每个字段到 column,显式映射每个 struct 到 table,这样不是更好吗? @lunny
Owner

还有个差不多是同类的问题。

yaml 提供了 column_mappertable_mapper 两个选项让用户自己定义怎么把名字映射进 go ,但修改这两个配置需要在代码里改 engine.SetColumnMapperenigne.SetTableMapper ,不然就要改 template,很麻烦还容易人为出错。

直接在默认 template 里,显式映射每个字段到 column,显式映射每个 struct 到 table,这样不是更好吗?

@lunny

Good idea!

> 还有个差不多是同类的问题。 > > yaml 提供了 `column_mapper` 和 `table_mapper` 两个选项让用户自己定义怎么把名字映射进 go ,但修改这两个配置需要在代码里改 `engine.SetColumnMapper` 和 `enigne.SetTableMapper` ,不然就要改 template,很麻烦还容易人为出错。 > > 直接在默认 template 里,显式映射每个字段到 column,显式映射每个 struct 到 table,这样不是更好吗? > > @lunny Good idea!
lunny closed this issue 2021-09-07 05:46:25 +00:00
Sign in to join this conversation.
No Milestone
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/reverse#27
No description provided.