beego orm 一对多、多对多 关联查询

一对多

model
ype User struct {
Id int64 json:"id"
Name string json:"name,omitempty" orm:"size(50)"
Passwords string json:"passwords" orm:"size(32)"
Baby []Baby json:"baby" orm:"reverse(many)"
}
type Baby struct {
Id int64
Name string json:"name" orm:"size(50)"
User
User json:"user" orm:"rel(fk);index"
}

数据库查询
o:= orm.NewOrm()
o.QueryTable("tb_user").Filter("id" ,user.Id).One(user)
o.LoadRelated(user,"Baby")

返回结果

{
"id": 2,
"name": "test",
"passwords": "123456",
"baby": [
{
"Id": 1,
"name": "慕青",
"user": {
"id": 2,
"passwords": ""
}
},
{
"Id": 2,
"name": "木木",
"user": {
"id": 2,
"passwords": ""
}
}
]
}

多对多

models 表结构
// User table 用户表,与用户组表多对多关系
type User struct {
Id int
UserName string orm:"unique"
Department string
Email string
Groups []Group orm:"rel(m2m)" //多对多
}
// Group table 用户组表,与用户表多对多关系
type Group struct {
Id int
GroupName string orm:"unique"
Introduce string
Users []
User orm:"reverse(many)" //反向多对多
}

添加
o := orm.NewOrm()
u1 := User{UserName: "zhangszan"}
u2 := User{UserName: "lisi"}
g1 := Group{GroupName: "g1"}
g2 := Group{GroupName: "g2"}
o.InsertMulti(2, []User{u1, u2})
o.InsertMulti(2, []Group{g1, g2})
m2mu1 := o.QueryM2M(&u1, "Groups")
m2mu2 := o.QueryM2M(&u2, "Groups")
m2mu1.Add(&g1)
m2mu1.Add(&g2)
m2mu2.Add(&g2)

删除方法和添加方法相似,将add改成Remove即可。另外还是clear等等

查询
o := orm.NewOrm()
u := new(User)
u.Id = 1
o.LoadRelated(r, "Groups")

原文地址:https://blog.51cto.com/1345992/2425876

时间: 2024-10-14 21:47:13

beego orm 一对多、多对多 关联查询的相关文章

MyBatis 一对多,多对一关联查询的时候Mapper的顺序

要先写association,然后写collection:这是由DTD决定的: <resultMap ...> <association ...> </association> <collection ...> </collection > </resultMap>

NHibernate教程(11)--多对多关联查询

本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型: 在图上,我已经清晰的标注了表之间的关系,上两篇分析Customer和Order之间的"外键关系"或者称作"父子关系"."一对多关系"和关联查询,这一篇以Order为中心,分析Order和Product之间的关系,直接看下面一幅图的两张表: 上面两

[NHibernate]一对多关系(关联查询)

目录 写在前面 文档与系列文章 一对多查询 总结 写在前面 上篇文章介绍了nhibernate的一对多关系如何配置,以及级联删除,级联添加数据的内容.这篇文章我们将学习nhibernate中的一对多关系的关联查询.前面文章中也介绍的nhibernate的查询:HQL,条件查询,原生SQL查询. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernat

mybatis 一对多和多对一关联查询

首先  数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.util.Date; public class Student { private Integer sno; private String sname; private String ssex; private Integer sclass; private StudentMajor studentmaj

mybatis多对多关联查询——(十)

1.需求 查询用户及用户购买商品信息. 2     sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail.items SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.

session 原理及ORM 一对多 多对多的关系

一.SESSIN 原理 首先客户端访问服务器时生成一个COOKIE,服务器上有一个专门保存客户端访问服务器时COOKIE的SESSION 字典,  当客户端去访问服务器时,发送COOKIE 请求 去服务器SESSION字典认证,如果字典里没有,则生成SESSION 字符串保存到SESSION 字典中,然后返回给客户端,保存到COOKIE里,下次再访问服务器时 拿着此字符串去服务器端认证. 代码如下 #!/usr/bin/env python # -*- coding:utf-8 -*- impo

Hibernate 多对一关联查询

一.单向多对一和双向多对一的区别 如果只需要从一方获取另一方数据,就用单向多对一:如果需要从双方都获取对方数据,就用双向多对一. 如果有两个对象,一个为User对象,一个为Department对象,一个用户只能属于一个部门,而一个部门可以包含多个用户.这样就是多对一关系.如下图 假设:我们需要通过用户找到所对应的部门,不需要通过部门查询该部门有哪些用户,就采用单向多对一关系 如果:我们不仅需要通过用户获取所对应的部门,还需要通过部门对象获取该部门下的用户,那么就采用双向多对一 二.单向多对一关系

Hibernate 多对多关联查询条件使用

from Brand as b inner join fetch b.styles as s where s.styleId=?

hibernate一对多等情况关联查询效率低的解决方法

方法就是设置lazy=true 其实整个项目在接手时已经搭建好框架,数据库采用的是MySQL.客户运行了一年多时间,速度越来越慢.加上最近新开发的功能,速度已经不能让人接受. 先解决了MySQL远程访问速度问题,效果有了变化,但是依旧不能让人接受.后加功能都是自己亲手建的表,从数据库上杜绝了外键(个人不喜欢),没想到的是之前的表全是外键,而且有很多...设计不合理.废话不多说了,讲一讲改变后和之前的变化.之前页面加载10S,测试得分是0分,伤心的要死.改变之后是1s,得分88分.....好了不多