• Golang gorm manytomany 多对多 更新、删除、替换


     

     

     

    Delete 移除 只删除中间表的数据   删除原有的


    1. var a Article1
    2. db.Preload("Tag1s").Take(&a, 1)
    3. fmt.Printf("%v", a)
    4. {1 k8s [{1 cloud []} {2 linux []}]}
    5. mysql> select * from article1;
    6. +----+--------+
    7. | id | title |
    8. +----+--------+
    9. | 1 | k8s |
    10. | 2 | golang |
    11. +----+--------+
    12. mysql> select * from tag1;
    13. +----+-------+
    14. | id | name |
    15. +----+-------+
    16. | 1 | cloud |
    17. | 2 | linux |
    18. +----+-------+
    19. mysql> select * from article_tags;
    20. +-------------+---------+
    21. | article1_id | tag1_id |
    22. +-------------+---------+
    23. | 1 | 1 |
    24. | 1 | 2 |
    25. | 2 | 2 |
    26. +-------------+---------+

    (1)model 先拿到这张表,

    (2)Association然后去连接tags第三张表

    (3)之后就是最关键的要去执行什么操作,这里是delete,删除谁呢?删除的就是article关联的tag。

    1. var a Article1
    2. db.Preload("Tag1s").Take(&a, 1)
    3. db.Model(&a).Association("Tag1s").Delete(a.Tag1s)
    4. fmt.Printf("%v", a)
    5. {1 k8s []}
    6. mysql> select * from tag1;
    7. +----+-------+
    8. | id | name |
    9. +----+-------+
    10. | 1 | cloud |
    11. | 2 | linux |
    12. +----+-------+
    13. mysql> select * from article1;
    14. +----+--------+
    15. | id | title |
    16. +----+--------+
    17. | 1 | k8s |
    18. | 2 | golang |
    19. +----+--------+
    20. mysql> select * from article_tags;
    21. +-------------+---------+
    22. | article1_id | tag1_id |
    23. +-------------+---------+
    24. | 2 | 2 |
    25. +-------------+---------+

     

     

    添加 和上面一样使用Append


    1. var t []Tag1
    2. db.Find(&t)
    3. var a Article1
    4. db.Preload("Tag1s").Take(&a, 1)
    5. db.Model(&a).Association("Tag1s").Append(&t)
    6. fmt.Printf("%v", a)
    7. {1 k8s [{1 cloud []} {2 linux []}]}
    8. mysql> select * from article1;
    9. +----+--------+
    10. | id | title |
    11. +----+--------+
    12. | 1 | k8s |
    13. | 2 | golang |
    14. +----+--------+
    15. mysql> select * from tag1;
    16. +----+-------+
    17. | id | name |
    18. +----+-------+
    19. | 1 | cloud |
    20. | 2 | linux |
    21. +----+-------+
    22. mysql> select * from article_tags;
    23. +-------------+---------+
    24. | article1_id | tag1_id |
    25. +-------------+---------+
    26. | 1 | 1 |
    27. | 1 | 2 |
    28. | 2 | 2 |
    29. +-------------+---------+

     

    Replace  替换


    1. var t Tag1
    2. db.Take(&t, 1)
    3. var a Article1
    4. db.Preload("Tag1s").Take(&a, 2)
    5. db.Model(&a).Association("Tag1s").Replace(&t)
    6. fmt.Printf("%v", a)
    7. {2 golang [{1 cloud []}]}

     

  • 相关阅读:
    实验四-Shelllab实验(csapp、计算机系统外壳实验)
    Anaconda安装教程(Windows环境下)
    java简介
    springboot+大学生就业规划系统 毕业设计-附源码191451
    springboot + nacos + aws secretmanager 做账号密码隐私处理
    【vue 首屏加载优化】
    《JAVA设计模式系列》解释器模式
    80C51单片机的七种寻址方式
    数据可视化工具中的显眼包:奥威BI自带方案上阵
    ubuntu安装和启动redis命令步骤及其配置文件redis.conf
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/132863536