orbit.model is an abstraction over LuaSQL that adds simple CRUD and parameterized queries, a sort of ORM super-lite. When you create a model,
orbit.model introspects the database table that corresponds to your model and uses this metadata to do type conversions and build SQL statements.
Intializing models is very simple. The code below creates an
orbit.model instance connected to an SQLite3 database, and then creates a model object backed by the
Once you have a model object, you can create new objects with
new. You can set fields in this object just like a plain Lua table, and call its method
save to write it to the database. Continuing the previous example:
All model database tables need to have an autogenerated field named
id. If the table has a
created_at field of type timestamp,
orbit.model will automatically store the timestamp when you created the record. An
updated_at field, if it exists, will be automatically kept with the timestamp of the last call to
Well, adding new records is useless if you do not have a way to get them back. That is what the finders are for. The basic finders is
find_all, which returns all records that match its parameters (or all records of called without arguments). It is best to show an example:
This code snippet gets all todo items that are done and were updated since November 1st, 2009, ordered by descending date of creation, then iterates over this list and prints their titles. The first argument of
find_all is a template for the
WHERE clause, with question marks in place of the values. The second is a table of parameters, where the list part has the values that replace the question marks in the template, and the hash part has options that control other parts of the query.
There is an analogous
find_first method that works just like
find_all, but returns only the first record that matches.
In another post I will show how to do more magic with