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
...
}
相关链接
【励志篇】:
古之成大事掌大学问者,不惟有超世之才,亦必有坚韧不拔之志。