Open2
ent触ってみる
Edges()
を定義すると、こんなのが生成される。
// QueryTokens queries the tokens edge of a User.
func (c *UserClient) QueryTokens(u *User) *FitbitQuery {
query := &FitbitQuery{config: c.config}
query.path = func(ctx context.Context) (fromV *sql.Selector, _ error) {
id := u.ID
step := sqlgraph.NewStep(
sqlgraph.From(user.Table, user.FieldID, id),
sqlgraph.To(fitbit.Table, fitbit.FieldID),
sqlgraph.Edge(sqlgraph.O2M, false, user.TokensTable, user.TokensColumn),
)
fromV = sqlgraph.Neighbors(u.driver.Dialect(), step)
return fromV, nil
}
return query
}
QueryTokens
のu
はconfigを保持してないとDialectでエラーになるんだけど、もしc.driver.Dialect
だったらそんな必要ない。この後の処理を考えてもc
からDialect取る方が良いような気がする。
こんな感じでFields
で指定したカラムを利用するとfitbit.UserIDEQ
が使えるようになるので、QueryTokens
無しでトークン取得できるようになった。
func (Fitbit) Fields() []ent.Field {
return []ent.Field{
field.Int("user_id").Optional(),
...
// Edges of the Fitbit.
func (Fitbit) Edges() []ent.Edge {
return []ent.Edge{
edge.From("user", User.Type).
Ref("tokens").
Field("user_id").
Unique(),
}
}