一百零八步 2022-12-26 20:51 采纳率: 100%
浏览 48
已结题

gORM学习过程中有些疑问,技术请教

问题遇到的现象和发生背景

Go newer,从Python转过来的,目前遇到一个关于gORM的问题

遇到的现象和发生背景,请写出第一个错误信息

如下两个情况:
1、两个表,一个表 Company(公司)、一个表Department(部门)。
2、两张表通过Many2Many相互关联的。gORM会创建一张中间表(company_department)

3、数据库情况如下:

+---------------------+
| Tables_in_warehouse |
+---------------------+
| company             |                <----   公司信息表
| company_department  |       <----  公司和部门的中间表
| department          |                <----  部门信息表
| user                |
| user_info           |
+---------------------+

4、公司表中的数据如下:

+----+---------------------+---------------------+------------+-----------+-----------------+-----------------+
| id | created_at                 | updated_at                | deleted_at  | comment   | company_name_zh | company_name_en |
+----+---------------------+---------------------+------------+-----------+-----------------+-----------------+
|  1 | 2022-12-03 20:59:11 | 2022-12-03 20:59:11 | NULL       | 上海高新  | 上海高新        | Shanghai GaoX   |
|  2 | 2022-12-03 22:25:29 | 2022-12-03 22:25:29 | NULL       | gaowency2 | 上海Wanl        | Wanl            |
|  3 | 2022-12-04 11:52:45 | 2022-12-04 11:52:45 | NULL       | gaowen2   | gaowen23        | gaowen23        |
|  4 | 2022-12-04 11:59:57 | 2022-12-04 11:59:57 | NULL       | 自动化    | 自动化          | Shanghai        |
+----+---------------------+---------------------+------------+-----------+-----------------+-----------------+\

5、部门表中的数据如下:

+----+---------------------+---------------------+------------+---------+--------------------+--------------------+
| id | created_at          | updated_at          | deleted_at | comment | department_name_zh | department_name_en |
+----+---------------------+---------------------+------------+---------+--------------------+--------------------+
|  1 | 2022-12-13 19:58:53 | 2022-12-13 19:58:53 | NULL       | 开发    | 开发部2            | dev                |
|  2 | 2022-12-13 22:29:12 | 2022-12-13 22:29:12 | NULL       | 开发    | 开发部             | dev                |
|  3 | 2022-12-13 22:34:53 | 2022-12-13 22:34:53 | NULL       | 开发    | 开发部33           | dev                |
+----+---------------------+---------------------+------------+---------+--------------------+--------------------+

6、company_department中间表情况如下:

+---------------+------------+
| department_id | company_id |
+---------------+------------+
|             1 |          1 |
|             2 |          1 |
|             2 |          2 |
+---------------+------------+
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

我想实现一个联表查询+模糊查询的功能
1、我通过查询 department表
2、在查询department表的时候输入一个参数,这个参数会模糊匹配department中的department_name_zh 、department_name_en 等字段,也能匹配company表中的company_name_zh 、company_name_en等字段

  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2022-12-26 21:37
    关注

    首先可以在 Department 表中定义一个 Many2Many 关联,用于连接 Company 表。

    type Department struct {
        ID            int
        DepartmentNameZh string
        DepartmentNameEn string
        Companies []*Company `gorm:"many2many:company_department;"`
    }
    

    然后可以使用 gORM 的 Preload 方法来联表查询,并使用 Where 方法进行模糊查询。

    func QueryDepartments(db *gorm.DB, query string) ([]Department, error) {
        var departments []Department
        err := db.Preload("Companies").Where("department_name_zh LIKE ? OR department_name_en LIKE ? OR companies.company_name_zh LIKE ? OR companies.company_name_en LIKE ?", "%"+query+"%", "%"+query+"%", "%"+query+"%", "%"+query+"%").Find(&departments).Error
        if err != nil {
            return nil, err
        }
        return departments, nil
    }
    

    在调用 QueryDepartments 函数时,传入的 query 参数即为模糊查询的关键字,函数会在 department 表的 department_name_zh、department_name_en 字段和 company 表的 company_name_zh、company_name_en 字段中模糊匹配。

    注意在使用 Preload 方法时,需要指定要关联查询的表名(在本例中为 "Companies")。

    有关 gORM 的关联查询和模糊查询的更多信息,可以参考 gORM 官方文档:

    关联查询: https://gorm.io/docs/associations.html
    模糊查询: https://gorm.io/docs/query.html#Like

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 创建了问题 12月26日

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答