gen icon indicating copy to clipboard operation
gen copied to clipboard

导出query的Fields type

Open trim21 opened this issue 3 years ago • 5 comments

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 avatar Jul 23 '22 18:07 trim21

@Trim21 参考下 gendemo,生成代码设置default model,和你挂到struct上的效果应该差不多?

qqxhb avatar Jul 24 '22 02:07 qqxhb

方便的话,写一个具体的预期效果出来?

tr1v3r avatar Jul 25 '22 07:07 tr1v3r

比如我现在是这么写的

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(…
...
}

trim21 avatar Aug 05 '22 00:08 trim21

如果觉得不是很合适的话也可以直接关issue。因为从Generator导出的方法和字段可以获取到所有生成的结构体,自己写一段程序额外导出这些类型也不是很麻烦。

trim21 avatar Aug 05 '22 00:08 trim21

@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

qqxhb avatar Aug 05 '22 04:08 qqxhb