2 回答

TA貢獻(xiàn)2036條經(jīng)驗 獲得超8個贊
我可以建議我以前使用過的另一種方法。
在這種情況下,您在查詢中生成標(biāo)簽的 json 并將其返回。
優(yōu)點:您有 1 次調(diào)用 db,它聚合數(shù)據(jù),您所要做的就是將 json 解析為一個數(shù)組。
缺點:有點難看。請隨意抨擊我。
type jointItem struct {
Item
ParsedTags string
Tags []Tag `gorm:"-"`
}
var jointItems []*jointItem
db.Raw(`SELECT
items.*,
(SELECT CONCAT(
'[',
GROUP_CONCAT(
JSON_OBJECT('id', id,
'name', name
)
),
']'
)) as parsed_tags
FROM items`).Scan(&jointItems)
for _, o := range jointItems {
var tempTags []Tag
if err := json.Unmarshall(o.ParsedTags, &tempTags) ; err != nil {
// do something
}
o.Tags = tempTags
}
編輯:代碼可能表現(xiàn)得很奇怪,所以我發(fā)現(xiàn)在移動時最好使用臨時標(biāo)簽數(shù)組而不是使用相同的結(jié)構(gòu)。

TA貢獻(xiàn)2016條經(jīng)驗 獲得超9個贊

TA貢獻(xiàn)1851條經(jīng)驗 獲得超5個贊
postgres 中的 sql:
create schema temp;
set search_path = temp;
create table item
(
id INT generated by default as identity primary key
);
create table tag
(
id INT generated by default as identity primary key,
name VARCHAR(160),
item_id INT references item (id)
);
create view item_tags as
select id,
(
select
array_to_json(array_agg(row_to_json(taglist.*))) as array_to_json
from (
select tag.name, tag.id
from tag
where item_id = item.id
) taglist ) as tags
from item ;
-- golang query this maybe
select row_to_json(row)
from (
select * from item_tags
) row;
然后golang查詢這個sql:
select row_to_json(row)
from (
select * from item_tags
) row;
并解組去結(jié)構(gòu):
親:
postgres 管理數(shù)據(jù)的關(guān)系。使用 sql 函數(shù)添加/更新數(shù)據(jù)。
golang 管理業(yè)務(wù)模型和邏輯。
這很簡單。
- 2 回答
- 0 關(guān)注
- 256 瀏覽
添加回答
舉報