Мне дали PostgreSQL БД с тремя таблицами:
\d donators
Column | Type | Nullable
--------------------+--------------------------+----------
id | integer | not null
created_at | timestamp with time zone |
updated_at | timestamp with time zone |
deleted_at | timestamp with time zone |
fname | text |
lname | text |
\d charities
Column | Type | Nullable
--------------------+--------------------------+----------
id | integer | not null
created_at | timestamp with time zone |
updated_at | timestamp with time zone |
deleted_at | timestamp with time zone |
name | text |
funds | numeric |
\d donations
Column | Type | Nullable
--------------------+--------------------------+----------
id | integer | not null
created_at | timestamp with time zone |
updated_at | timestamp with time zone |
deleted_at | timestamp with time zone |
donator_id | integer | not null
charity_id | integer | not null
Мне нужно запросить БД, чтобы заполнить фрагмент следующей структуры Charity (например, [] Charity):
type (
Person struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
}
Charity struct {
ID uint `json:"id"`
Name string `json:"name"`
NumberOfDonations uint `json:"number_of_donations"`
TotalFunds float64 `json:"total_funds"`
LastDonator *Person `json:"last_donator"`
}
)
где Number of Donations - это количество пожертвований в таблице соединений пожертвований, а LastDonator - лицо, связанное с самым последним пожертвованием create_at ...
Я могу сделать это только с необработанный запрос SQL, который включает два подзапроса и 3 соединения, а затем некоторую очистку в Go. Я хотел бы быть в состоянии сделать это более вовлеченным GORM-способом, используя предварительные загрузки или ассоциации, хотя я не знаю, как разработать запрос или пометить структуры.