I am encountering a situation where the sea-orm-cli generate entity command generates different relationship annotations based on how the foreign key constraints are specified in the SQLite schema. Specifically, there seems to be a difference in behavior when the UNIQUE keyword is used.
Here's a detailed example using two tables, Authors and Books, to illustrate my point:
Schema Definition
CREATE TABLE Authors (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
);
CREATE TABLE Books (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
authorID INTEGER,
title TEXT NOT NULL,
FOREIGN KEY (authorID) REFERENCES Authors(ID)
);
CREATE UNIQUE INDEX idx_books_author ON Books (authorID);
With this schema, I expect that the relationship generated should indicate a one-to-one relationship (has_one) between Authors and Books due to the unique index on Books.authorID. However, the behavior seems inconsistent depending on the placement and usage of UNIQUE constraints directly in the table definition versus the creation of a unique index separately.
Could you please clarify the following:
How does sea-orm-cli generate entity determine when to generate #[sea_orm(has_one = "related_entity")] vs #[sea_orm(has_many = "related_entity")]?
Is there a recommended way of defining foreign keys and unique constraints in the schema to ensure consistent relationship generation?
Any guidance or clarification on this matter would be greatly appreciated.
Hello sea-orm team,
I am encountering a situation where the
sea-orm-cli generate entity
command generates different relationship annotations based on how the foreign key constraints are specified in the SQLite schema. Specifically, there seems to be a difference in behavior when theUNIQUE
keyword is used.Here's a detailed example using two tables,
Authors
andBooks
, to illustrate my point:Schema Definition
With this schema, I expect that the relationship generated should indicate a one-to-one relationship (has_one) between Authors and Books due to the unique index on Books.authorID. However, the behavior seems inconsistent depending on the placement and usage of UNIQUE constraints directly in the table definition versus the creation of a unique index separately.
Could you please clarify the following:
How does sea-orm-cli generate entity determine when to generate #[sea_orm(has_one = "related_entity")] vs #[sea_orm(has_many = "related_entity")]? Is there a recommended way of defining foreign keys and unique constraints in the schema to ensure consistent relationship generation? Any guidance or clarification on this matter would be greatly appreciated.
Thank you for your assistance!
Versions
βββ sea-orm v0.12.14 β βββ sea-orm-macros v0.12.14 (proc-macro) β β βββ sea-bae v0.2.0 (proc-macro) β βββ sea-query v0.30.7 β β βββ sea-query-derive v0.4.1 (proc-macro) β βββ sea-query-binder v0.5.0 β β βββ sea-query v0.30.7 () βββ sea-query v0.30.7 () β βββ sea-orm v0.12.14 () β βββ sea-query v0.30.7 ()