簡體   English   中英

如何在gorm中鏈接連接?

[英]How to chain joins in gorm?

我想寫一個查詢

SELECT table_a.*, table_c.* 
FROM table_a 
  LEFT JOIN table_b ON table_a.id = table_b.table_a_id
  LEFT JOIN table_c ON table_b.id = table_c.table_b_id
WHERE table_a.column_a = 'a_value',
  AND table_c.column_b = 'some_value'
  AND table_c.column_c = 'another_value';

編輯:我錯過了非常重要的一點,即where 子句變量不是固定的 根據輸入,每個表可能使用更多或更少的列。

目前,我的查詢看起來像

db.Table("table_a").
    Joins("left join table_b on table_a.id = table_b.table_a_id").
    Joins("left join table_c on table_b.id = table_c.table_b_id").
    Select("table_a.*, table_c.*").
    Table("table_a").Where(map[string]interface{}{"column_a": "value"}).
    Table("table_c").Where(map[string]interface{}{
        "column_b": "some_value", 
        "column_c": "another_value",
    }).
    Find(&elem)

但是,記錄的 SQL 語句是

SELECT table_a.*, table_c.* 
FROM `table_c` # gorm gives the wrong starting table, should be table_a
  LEFT JOIN table_b ON table_a.id = table_b.table_a_id 
  LEFT JOIN table_c ON table_b.id = table_c.table_b_id 
WHERE (`table_c`.`column_a` = 'value') # wrong table again
  AND (`table_c`.`column_b` = 'some_value') 
  AND (`table_c`.`column_c` = 'another_value')

我不確定這里有什么問題。 使用這種語法是否無法同時查詢不同的表? 我寧願盡可能避免使用原始查詢。

更新:我嘗試動態生成 SQL where 子句,但如果 gorm 提供更直接的方法,我會更喜歡。

您不需要調用這么多Table方法。 它使用您調用的最后一個來構建您的 SQL 查詢。

相反,一旦您連接了這些表,您就可以在連接之后的Where語句中使用它們。

嘗試這個:

db.Table("table_a").
    Joins("left join table_b on table_a.id = table_b.table_a_id").
    Joins("left join table_c on table_b.id = table_c.table_b_id").
    Select("table_a.*, table_c.*").
    Where("table_a.column_a = ?", "value").
    Where("table_c.column_b = ? AND table_c.column_c = ?", "some_value",  "another_value").
    Find(&elem)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM