2 Stimmen

Schleife über db intmap(person)

Beispiel:

type person = { name : string
                ; age : int
              }

db /person : intmap(person)

Ich weiß, wie ich eine einzelne Person aus der Datenbank abrufen kann, aber wie kann ich alle Personen abrufen und sie in einer HTML-Tabelle ausgeben?

Vielen Dank.

4voto

Fred Punkte 1092

Das sollte genügen:

my_html_list() =
  List.map(
    person -> <li>{person.name}</li>,
    IntMap.To.val_list(/person)
  )

render() = <ul>{my_html_list()}</ul>

... und dann render() in Ihrer Server-Seite aufrufen ...

3voto

AltGr Punkte 31

Einfach ausgedrückt:

  • /person[i] holt das Element i aus der Datenbank
  • /Person holt die gesamte Intmap aus der Datenbank
  • !/person gibt Ihnen ein Handle auf die Datenbank, auf die Sie z. B. Db.intmap_fold_range für einen optimierten Teilzugriff verwenden können

2voto

Cédrics Punkte 1974

Ich empfehle Ihnen, Db.intmap_fold_range anstelle von InMap.fold zu verwenden. Es ist schneller als InMap.fold, das die gesamte Karte in OPA erstellen muss, bevor es gefaltet wird.

http://opalang.org/resources/doc/index.html#db.opa.html/!/value_stdlib.core.db.Db.intmap_fold_range

Hier ist ein Beispiel für Ihren Typ:

type person = { name : string
                ; age : int
              }

db /person : intmap(person)

add(name, age) =
  /person[age] <- { ~name; ~age }

fold_person(acc, id) =
 person = /person[id]
 <>{acc}</><li>{person.name} {person.age}</li>

start() =
  do add("name1", 1)
  do add("name2", 2)
  do add("name3", 3)
  Db.intmap_fold_range(
    @/person,
    fold_person,
    <></>, 0, none, /* acc, starting key, optional max */
    (_ -> true) /* check range */
  )

server = one_page_server("Hello", start)

1voto

Fred Punkte 1092

Nach dem Kommentar von @shomodj zu meiner Antwort ist dies mein vollständiger Code zum Drucken der Personenliste (inspiriert von Cédrics Code)

// Declare type person
type person = {
  name : string
  age : int
}

// Declare database
db /person : intmap(person)

// Add function
add(name, age) =
  /person[age] <- { ~name ~age }

// Add to database when server launches
do add("name1", 1)
do add("name2", 2)
do add("name3", 3)

// Build the persons <li> list
my_html_list() =
  List.map(
    person -> <li>{person.name}</li>,
    IntMap.To.val_list(/person)
  )

// Build the complete html list (with ul)
render() = <ul>{my_html_list()}</ul>

// Create the server
server = one_page_server("Hello", render)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X