Запрос на объединение таблицы соединения / соединения - PullRequest
0 голосов
/ 28 февраля 2020

Мне дали 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-способом, используя предварительные загрузки или ассоциации, хотя я не знаю, как разработать запрос или пометить структуры.

...