go-rel / go-rel/rel

Associated id is save automatically?

Open
#199 3 comments 0 reactions 0 assignees View on GitHub
hacktoberfest
Dominant language
Go
Stars
786
Forks
61
Avg merge
4d 11h
Merged PRs (30d)
2

Description

Hi!.

I'm having a little problem to save an associated id. I don't know if I'm doing it well. Let me explain what it is happen to me.

I have this db struct:

```
-- authors definition

CREATE TABLE authors (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT
);

-- books definition

CREATE TABLE books (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
title TEXT,
category TEXT,
price INTEGER,
discount NUMERIC,
stock INTEGER,
author_id INTEGER NOT NULL,
FOREIGN KEY(author_id) REFERENCES authors(id)
);
```

These are my go models:
```
type Author struct {
ID int32
Name string
}

type Book struct {
ID int32
Title string
Category string
Price int
Discount bool
Stock int
Author Author `ref:"author_id" fk:"id" autosave:"true"`
AuthorID int32
}
```

I want to save an Author instance and pass it to a Book instance. I was expecting that the relation would save AuthorID automatically but no. It shows this error:

```
panic: ForeignKeyConstraintError: rel: inconsistent belongs to ref and fk
```

This is the code I'm running:

```
const dbPath = "./go-rel-example.db"

func main() {
adapter, err := sqlite3.Open(dbPath)
if err != nil {
panic(err)
}

defer adapter.Close()

repo := rel.New(adapter)

err = Example(context.Background(), repo)
if err != nil {
panic(err)
}

}

func Example(ctx context.Context, repo rel.Repository) error {

return repo.Transaction(ctx, func(ctx context.Context) error {
author := Author{
Name: "Anne Paterson",
}

err := repo.Insert(ctx, &author)
if err != nil {
return err
}
log.Println(author)

book := Book{
Title: "A new story",
Category: "horror",
Price: 10,
Discount: false,
Stock: 2,
Author: author,
}
err = repo.Insert(ctx, &book)
if err != nil {
return err
}

log.Println(book)

log.Println("-----DONE-----")

return nil
})

}
```

Now my questing here is if this can be done. I don have any problem to pass the id to the association, but I thing would be great to pass the saved instance and rel takes the associated id to save it.

Thanks!!! 🏆 REL is awesome! 😃

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.