gen
gen copied to clipboard
导出query的Fields type
Describe the feature
支持导出query的filed 对应的类型。
Motivation
我目前是用gen来生成所有的SQL数据库表,然后把query绑定到不同的repository struct上面使用的。
虽然看到了之前的issue,可以在方法或者函数里面直接把query field赋值给变量,但在我的使用场景中,一个struct只会用到一两个table,不会用到query上面的全部SQL表。所以比较合适的办法是直接把query上面的某几个dao挂到我的不同struct上,而非把整个query挂到结构体上,然后再每次从query上面赋值出来。
同时因为这些类型没有导出,我也没法直接把query.Field 赋值给结构体的某个字段再使用。
希望能增加一个mode直接导出没有绑定context的表类型。
Related Issues
@Trim21 参考下 gendemo,生成代码设置default model,和你挂到struct上的效果应该差不多?
方便的话,写一个具体的预期效果出来?
比如我现在是这么写的
type mysqlRepo struct {
q *query.Query
log *zap.Logger
}
func (m mysqlRepo) WithTx(q *query.Query) domain.UserRepo {
return mysqlRepo{q: q, log: m.log}
}
func (m mysqlRepo) GetByID(ctx context.Context, userID model.UserID) (model.User, error) {
u, err := m.q.Member.WithContext(ctx).Where(m.q.Member.ID.Eq(userID)).First()
...
}
然后导出的话就可以这样写
type mysqlRepo struct {
member query.Member
log *zap.Logger
}
func (m mysqlRepo) WithTx(q *query.Query) domain.UserRepo {
return mysqlRepo{member: q.Member, log: m.log}
}
func (m mysqlRepo) GetByID(ctx context.Context, userID model.UserID) (model.User, error) {
u, err := m.member.WithContext(ctx).Where(…
...
}
如果觉得不是很合适的话也可以直接关issue。因为从Generator导出的方法和字段可以获取到所有生成的结构体,自己写一段程序额外导出这些类型也不是很麻烦。
@Trim21 可以用default模式生成代码 然后你这用的话可以直接 query.Member
type mysqlRepo struct {
log *zap.Logger
}
func (m mysqlRepo) WithTx(q *query.Query) domain.UserRepo {
return mysqlRepo{member: q.Member, log: m.log}
}
func (m mysqlRepo) GetByID(ctx context.Context, userID model.UserID) (model.User, error) {
u, err :=query.Member.WithContext(ctx).Where(…
...
}
感觉和你导出的用法没啥差别 m.member -> query.Member