Comments (5)
Yes, I see the issue. I'm working on a fix for this now. What will end up happening is that there will likely be 2 new command line options that toggle behavior for this, however I'm looking into seeing if there is a way to detect this automatically and force the behavior.
from xo.
I've pushed a change that should fix this in the default case, and introduces a new command line option, --fk-mode
that provides a number of different types of foreign key modes. The default, smart
will look if there are other foreign keys with that same parent name and use the field
foreign key mode, otherwise if there are no collisions, then the parent
foreign key mode will be used.
A summary of the foreign key modes / behaviors:
smart - default behavior; will use parent when no name collisions, and field when there are
parent - foreign key funcs on generated types as will be in the form of '<RefTable>'.
field - foreign key funcs on generated types as will be in the form of '<RefTable>By<FieldName>'
key - foreign key funcs on generated types as will be in the form of '<RefTable>By<KeyName>'
For example, if you have a simple authors
and books
relationship (as in the examples), then the following will be the result for the different modes:
parent - func (b *Book) Author()
field - func (b *Book) AuthorByAuthorID()
key - func (b *Book) AuthorByFk123() // (assuming the foreign key name is 'fk_123')
from xo.
Let me know if that works for you.
I am hesitant to do anything more complicated or to change the templates, as I think if there is more custom logic/behavior necessary, then one likely needs to use custom templates for their schema as it is not possible to accommodate all the different schema designs styles, and also still work across the supported database types, here.
from xo.
Thank you very much! The change works fine for me.
Just one minor thing: the default argument for --fk-mode
shows as a pointer to FkMode.
--fk-mode FK-MODE, -k FK-MODE
sets mode for naming foreign key funcs in generated Go code [values: <smart|parent|field|key>] [default: smart] [default: 0xc82000e978]
from xo.
I'm aware of the issue -- it's a problem with the package I'm using for command line argument parsing, which is why I manually put the other [default: smart] text there.
Glad it works for you!
from xo.
Related Issues (20)
- How to generate postgres functions under schema other than public
- xo schema scan is failing. HOT 1
- BPMN HOT 1
- Could you add the Comment of each Field of migration table to generated xo files ? HOT 6
- Can I generate only struct? (without CRUD methods)
- [Bug] array type is not generated correctly for integer array in case of postgres HOT 1
- error: createdb: unable to import package: 1:22: import "createdb" error: unable to find source related to: "createdb" HOT 5
- invalid memory address or nil pointer dereference
- Procedure code generation may have issues HOT 1
- _exists field in code generated code
- Not run go 1.19.5 on windows HOT 1
- run xo fails on windows os HOT 7
- Unable to run because of createdb error HOT 2
- [Question] List all Indexes from table inside typedef template HOT 1
- "LIMIT %%limit int%%" in MySQL
- Does xo support camelcase json tags? HOT 3
- Postgres foreign keys not working if name is the same HOT 2
- Postgres insert/update RETURNING HOT 1
- Type mapping HOT 1
- Custom types... again HOT 2
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 xo.