Comments (3)
Because gorm can't know when should eager loading related structs, so just don't do it.
And you have to do something like this in your application ;(
db.First(&user)
db.Model(&user).Related(&user.Emails)
from gorm.
I stumbled over this as well.. I guess there should be a nicer solution for this.
Can we maybe introduce a .WithRelated()
switch to trigger loading of relations?
The current approach gets kind of hairy for more complex relations.
In my current project I have to load multiple relations on a returned result of multiple rows.
Right now I do this which strikes down my query times quite hard...
start := time.Now()
for idx, a := range sliceOfModelA {
txn.Model(&a).Related(&(sliceOfModelA[idx].modelB))
txn.Model(&a).Related(&(sliceOfModelA[idx].modelC))
txn.Model(&a).Related(&(sliceOfModelA[idx].modelD))
}
revel.INFO.Printf("LookupRelated took %v for %d entries.", time.Since(start), len(aslice))
While writing this I came up with an Idea to perform the relation lookups more efficient. I hacked together a proof of concept here.
I tried if you can Scan into multiple Objects by using an []interface{}
containing the fields of the result and expanding it in like so: .Scan(fields...)
.
Long story short, it works!
This allows you to construct SQL-Querries which JOIN together your relations and Scan them in one go.
If you can give me a hin where to start, I will try to turn this into a pull request but i'm currently to unfamiliar with gorm's code base to know if this is feasible.
from gorm.
I played with this Idea some more, generalising it with reflection. I uploaded it in this playground.
I'd love to hear some suggestion to this approach. Obviously which fields to use as the join keys should be more Intelligent.
from gorm.
Related Issues (20)
- PostgreSQL inet data type support
- Use *DB.Row(sql string, values ...interface{}) method directly occur Error 1040: Too many connections HOT 1
- Use *DB.Raw(sql string, values ...interface{}) method directly occur Error 1040: Too many connections HOT 2
- Simplify relation mapping between tables
- unsupported relations for schema ExamPaper
- Is gorm supports multi-rows update? HOT 1
- Why `Open` support multi `Option` but only apply the last one after sort?
- [BUG] `strings.(*Builder).WriteByte` memory leak in `.FirstOrCreate` with `PrepareStmts: true` setting HOT 2
- Is the issue of zero values in gorm struct solved?
- how can i read data that "with totals" from clickhouse? HOT 1
- Upgrade 1.25.5->1.25.7: AutoMigrate returns the error "insufficient arguments" HOT 6
- bug: first argument in the params is not binary
- 1.2.7 breaks migrations when updating 1.2.5 HOT 10
- clause/expression.go does not provide any mechanism to escape ? literal inside SQL statement
- Mysql在一对多情况下会双倍插入修改的外键内容 HOT 2
- Belongs To Relation failed when owner's field name is same to foreignKey HOT 1
- Default value for text type is not showing in generated structs HOT 1
- Support duckdb HOT 1
- How to get transaction ID by gorm? HOT 1
- SQL printed to terminal is error
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gorm.