
When using `Preload` to include the results of a "has many" relationship, Gorm previously returned an uninitialized slice for any such relations that bore zero records. This distinction was most apparent when the results were marshalled to a JSON representation--a record with zero related records would be represented with `null`. For example, consider the following schema: id | name ---|------ 1 | Lorin 2 | Sue id | p_id | value ---|------|------------------- 1 | 1 | lorin@example.com 2 | 1 | lorin2@example.com Querying with: db.Preload("Email").Find(&people) And marshalling the resulting value of `people` to JSON would yield the following string: [ { "name": "Lorin", "email": [ "lorin@example.com", "lorin2@example.com" ] }, { "name": "Sue", "email": null } ] Beyond being inconsistent, the value `null` in this response differs semantically from the actual state of the database. The database actually has zero related records for the second user, so a JSON value of `[]` is appropriate. Update the callback that processes "has many" relationships to communicate empty query results with an empty slice.
GORM
The fantastic ORM library for Golang, aims to be developer friendly.
Overview
- Full-Featured ORM (almost)
- Associations (Has One, Has Many, Belongs To, Many To Many, Polymorphism)
- Callbacks (Before/After Create/Save/Update/Delete/Find)
- Preloading (eager loading)
- Transactions
- Composite Primary Key
- SQL Builder
- Auto Migrations
- Logger
- Extendable, write Plugins based on GORM callbacks
- Every feature comes with tests
- Developer Friendly
Getting Started
- GORM Guides jinzhu.github.com/gorm
Upgrading To V1.0
Author
jinzhu
Contributors
https://github.com/jinzhu/gorm/graphs/contributors
License
Released under the MIT License.
Languages
Go
99.9%
Shell
0.1%