4 ms·
you means use join to query and output data as table? otherwise I think “eager fetching” is better way
by bigpigeon 9y ago
you means use join to query and output data as table?
otherwise I think “eager fetching” is better way
- nemothekid 9y agoLets say I have a relationship where a User has one Profile. type User Struct { Id int ProfileId int Profile Profile } type Profile Struct { Id int } For a load like this: var u User db.Model(&User{}).Preload("Profile").Where("id = ?", 7).Take(&u) Gorm will do something like this: SELECT * FROM users WHERE id=7; SELECT * FROM profiles WHERE id=7; Where a join would be more desirable (only involves 1 trip to the db): SELECT * FROM users JOIN profiles ON profiles.id=users.profileid WHERE users.id=7 This also has a huge effect on when your initial queries aren't restricted by ID. Gorm will do huge "id IN (1,2,3,4)" queries - or sometimes if I need to filter on a relation (i.e. get users where profile.foo = bar), I end up doing the join getting that data anyways, then the eager queries loads that data again.
- bigpigeon 9y agoIn "OneToOne" and "BelongTo" Join is match but in "ManyToMany" and "OneToMany" will generate duplicate data I think add Join method and only support "One Data" preload is good way