Skip to content

NamingStrategy doesn't work with gen #1393

@bluven

Description

@bluven

Your Question

I want to use SingularTable style, but the generated code uses plural table name.

func (u userDo) FindByName(name string) (result []model.User, err error) {
	var params []interface{}

	var generateSQL strings.Builder
	params = append(params, name)
	generateSQL.WriteString("SELECT * FROM users WHERE name = ? ")

	var executeSQL *gorm.DB
	executeSQL = u.UnderlyingDB().Raw(generateSQL.String(), params...).Find(&result) // ignore_security_alert
	err = executeSQL.Error

	return
}

This is my gen code

package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gen"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"

	"github.com/bluven/hello-gen/model"
)

// Dynamic SQL
type Querier interface {
	// SELECT * FROM @@table WHERE name = @name
	FindByName(name string) ([]gen.T, error)
}

func main() {
	generateQuery()
}

func generateQuery() {
	dsn := "bluven:Admin123!@tcp(127.0.0.1:3306)/learn_gorm?charset=utf8mb4&parseTime=True&loc=Local"
	namingStrategy := schema.NamingStrategy{
		SingularTable: true,
	}
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: namingStrategy,
	})
	if err != nil {
		panic("failed to connect database")
	}

	config := &gen.Config{
		OutPath: "./query",
		Mode:    gen.WithoutContext | gen.WithDefaultQuery | gen.WithQueryInterface, // generate mode
	}
	config.WithTableNameStrategy(namingStrategy.TableName)

	g := gen.NewGenerator(*config)

	db.AutoMigrate(&model.User{})
	g.UseDB(db) // reuse your gorm db
	g.ApplyBasic(model.User{})
	g.ApplyInterface(func(Querier) {}, model.User{})
	g.Execute()
}
package model

import (
	"gorm.io/gorm"
)

type User struct {
	gorm.Model
	Name     string
	Password string
	IsAdmin  bool
}

What should I do to make NamingStrategy work

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions