• 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 []}]}

     

  • 相关阅读:
    100 个 Kotlin 面试问题及答案(其一)
    STM32 你不知道的看门狗细节
    echarts案例之双折线渐变图
    F5服务器负载均衡能力如何?一文了解
    【勇敢饭饭,不怕刷题之链表】链表中有环的问题
    Onnxruntime之图像分类(c++)
    申请国外博士后的常识
    微服务8:通信之RPC实践篇(附源码)
    【GPT开发】人人都能用ChatGPT4.0做Avatar虚拟人直播
    vue-router路由守卫进阶
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/132863536