artanis
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Artanis] Foreign Key for Migrations


From: Jonathan Schmeling
Subject: Re: [Artanis] Foreign Key for Migrations
Date: Sun, 17 Mar 2019 07:57:01 +0000

Thanks so much for the response! Ahhh; I did wonder if Artanis had anything had anything like that. That is really nice to work with.

So I have a table named PEOPLE; so I ran art draw model PEOPLE and that reated a file named PEOPLE.scm which contains

;; Model PEOPLE definition of myapp
;; Please add your license header here.
;; This file is generated automatically by GNU Artanis.
(create-artanis-model PEOPLE) ; DO NOT REMOVE THIS LINE!!!

I then added to one of my controllers (use-modules (app models PEOPLE)) and running Artanis and visiting endpoints in that controller didn't throw any errors.

So then I added a call similar to the one you had that uses ($PEOPLE …) in the controller; however, then I get the error In procedure module-lookup: Unbound variable: $PEOPLE when I visit the endpoint that uses the function call.

Did I miss something?

Jonathan
On Saturday, March 16, 2019, 3:31:19 PM CDT, Nala Ginrut <address@hidden> wrote:



Hi Jonathan!
Sorry it's my mistake to neglect this part in the doc.
You don't have to take care of the DB connection management by
yourself. You may just use `art draw model person' to create the named
mapping to the "person" table, and there's an exported relational
mapping object named "$person", you may import (app models person) in
other controller to use it. It's based on FPRM, but the table name has
already been wrapped into the closure:
https://www.gnu.org/software/artanis/manual/manual.html#orgeff2a47

And maybe read its implementation is clearer to you:
https://gitlab.com/NalaGinrut/artanis/blob/master/artanis/mvc/model.scm#L226

The usage should look like this:

($person 'set #:name "nala" #:age 100)

BTW, please don't forget to config your DB in conf/artanis.conf first.

Best regards.


Jonathan Schmeling writes:

> Gotcha. That makes a lot of sense. Thanks a ton for explaining!
>
> Database related, is there a way to query the database from one of the controller -define methods (like (article-define show …) in the online documentation)? Using the function map-table-from-DB causes an error and attaching #:conn #t, like with the get function, also causes an error. Doing something like (:conn rc "SELECT * FROM PEOPLE") seems to work (or, at least, not throw an error) but I'm not sure what gets returned. The doc. says the returned value is described at https://www.gnu.org/software/artanis/manual/manual.html#org8ba121f but that section says "TODO".
> As always, any help is always super appreciated!
>
> Jonathan
>
> On 2/17/19 12:19 PM, Nala Ginrut wrote:
>
>
> Hi Jonathan!
> I'm glad you asked this question.
> The answer is actually written in the fprm.scm code comments that the
> relational mapping in Artanis is not going to provide database level
> foreign keys. The solution is to provide higher-abstract-level table
> operations as a replacement to save users to time to handle by
> themselves.
>
> The pros and cons of foreign keys are discussed a lot in the
> internet. The modern ORM may choose to drop foreign keys and provide
> higher layer for it.
>
>
> Unfortunately, this feature has not been implemented yet because of my time schedule.
>
> Of course, this issue is still open, the original plan is more
> ambitious. I think it's the time to add more features to the relational
> mapping framework.
> Welcome to discuss if you like.
>
> Best regards.
>
> Jonathan Schmeling writes:
>
>
>
> I'm not sure if it's been asked before but I couldn't find any mention
> in the doc. – is it feasible to define foreign keys for the create-table
> function? I want to reference another table's primary keys from a
> particular table, to link them.
>
> Jonathan


--
GNU Powered it
GPL Protected it
GOD Blessed it
HFG - NalaGinrut
Fingerprint F53B 4C56 95B5 E4D5 6093 4324 8469 6772 846A 0058

reply via email to

[Prev in Thread] Current Thread [Next in Thread]