Beego-i18n-ORM操作

1.beego 支持多语言

I18N = middleware.NewLocale("conf/i18n.conf", beego.AppConfig.String("language"))

配置文件如下:


{
  "E-mail Address": {
    "en": "E-mail Address",
    "zh": "邮箱地址",
    "vn": "อีเมล"
  },
  "Username": {
    "en": "Ussername",
    "zh": "用户名",
    "vn": "tên truy nhập"
  }
}

使用如下:

I18N.Translate("username", "vn")

2.mysql数据库初始化

// 注册数据源,注册模型,创建表
func init() {
	// set default database
	// 参数1        数据库的别名,用来在ORM中切换数据库使用
	// 参数2        driverName
	// 参数3        对应的链接字符串
	// 参数4(可选)  设置最大空闲连接
	// 参数5(可选)  设置最大数据库连接 (go >= 1.2)
	orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30,30)

	// register model
	orm.RegisterModel(new(User))
	//orm.RegisterModelWithPrefix("prefix_", new(User))  //使用表名前缀

	// auto create table 第一个参数:数据库别名,第二个参数:删除表后再创建,第三个参数:打印执行过程
	orm.RunSyncdb("default", false, true) 
}

3.查询结构到struct & map

// rows to struct
res := new(Options)
nums, err := o.Raw("SELECT name, value FROM options_table").RowsToStruct(res, "name", "value")

//rows to map
res := make(orm.Params)
nums, err := o.Raw("SELECT name, value FROM options_table").RowsToMap(&res, "name", "value")

var maps []orm.Params
num, err = o.Raw("SELECT user_name FROM user WHERE status = ?", 1).Values(&maps)

4.QueryBuilder使用

// User 包装了下面的查询结果
type User struct {
	Name string
	Age  int
}
var users []User

// 获取 QueryBuilder 对象. 需要指定数据库驱动参数。
// 第二个返回值是错误对象,在这里略过
qb, _ := orm.NewQueryBuilder("mysql")

// 构建查询对象
qb.Select("user.name",
	"profile.age").
	From("user").
	InnerJoin("profile").On("user.id_user = profile.fk_user").
	Where("age > ?").
	OrderBy("name").Desc().
	Limit(10).Offset(0)

// 导出SQL语句
sql := qb.String()

// 执行SQL语句
o := orm.NewOrm()
o.Raw(sql, 20).QueryRows(&users)

5.关联删除

on_delete
设置对应的 rel 关系删除时,如何处理关系字段。
cascade 级联删除(默认值)
set_null 设置为 NULL,需要设置 null = true
set_default 设置为默认值,需要设置 default 值
do_nothing 什么也不做,忽略

type User struct {
	...
	Profile *Profile `orm:"null;rel(one);on_delete(set_null)"` //设置为 NULL
	...
}

相关链接

https://www.kancloud.cn/hello123/beego/126109

原文地址:https://www.cnblogs.com/tomtellyou/p/12619382.html