Aller au contenu principal
Version: 1.2.1

ORM

Le module principal. C'est le point d'entree de la librairie.

-- OrvexORM est disponible globalement

ORM.model(tableName, fields, opts?)​

Cree un nouveau modele lie a une table MySQL.

Parametres​

ParametreTypeRequisDescription
tableNamestringOuiNom de la table MySQL
fieldstableOuiSchema : { colonne = "type", ... }
optstableNonOptions (voir ci-dessous)

Options (opts)​

OptionTypeDefautDescription
primaryKeystring"id"Nom de la colonne cle primaire

Types de champs disponibles​

TypeDescription
"string"Texte
"number"Nombre
"boolean"Vrai/faux
"json"Table Lua convertie en JSON automatiquement
"date"Date ("2024-03-15")
"datetime"Date et heure ("2024-03-15 14:30:00")
"timestamp"Horodatage ("2024-03-15 14:30:00")
"auto"Detection automatique (table → JSON, JSON string → table)

Retour​

OrvexModel — Un objet modele avec toutes les methodes CRUD, le query builder, et les relations.

Exemple​

local User = OrvexORM.model("users", {
identifier = "string",
money = "number",
job = "string",
position = "json",
metadata = "auto",
}, { primaryKey = "identifier" })

ORM.transaction(fn?) / ORM.transaction(adapter?)​

Cree un nouveau builder de transaction, ou execute une callback transactionnelle avec auto-commit.

Mode callback (recommande)​

local success = OrvexORM.transaction(function(tx)
tx:insert("users", { identifier = "license:abc", money = 500 })
tx:update("vehicles", { owner = "license:abc" }, { plate = "ABC123" })
end) -- auto-commit !

Mode builder​

local tx = OrvexORM.transaction()
tx:insert("users", { identifier = "license:abc", money = 500 })
tx:update("vehicles", { owner = "license:abc" }, { plate = "ABC123" })
local success = tx:commit()

Parametres​

ParametreTypeRequisDescription
fnfunctionNonCallback recevant le transaction builder. Si fourni, auto-commit a la fin.
adapterOrvexAdapterNonAdaptateur personnalise (utilise le defaut sinon)

Retour​

  • Mode callback : boolean — true si la transaction a reussi
  • Mode builder : OrvexTransaction — Un objet transaction avec les methodes insert, update, delete, upsert, addRaw, commit

ORM.enableCache(opts?)​

Active le cache global avec un TTL optionnel.

Parametres​

OptionTypeDefautDescription
ttlnumber60Duree de vie en secondes

Exemple​

OrvexORM.enableCache({ ttl = 30 })

ORM.disableCache()​

Desactive et vide le cache global.

OrvexORM.disableCache()

ORM.flushCache()​

Vide toutes les entrees du cache sans le desactiver.

OrvexORM.flushCache()

ORM.cacheStats()​

Retourne les statistiques du cache global.

Retour​

ChampTypeDescription
hitsnumberNombre de lectures servies depuis le cache
missesnumberNombre de lectures qui ont interroge la base
hitRatenumberRatio hits / (hits + misses)
entriesnumberNombre d'entrees actuellement en cache

Exemple​

local stats = OrvexORM.cacheStats()
print(("Cache : %d hits, %d misses (%.0f%%), %d entrees")
:format(stats.hits, stats.misses, stats.hitRate * 100, stats.entries))

ORM.setAdapter(adapter)​

Remplace l'adaptateur de base de donnees par defaut.

OrvexORM.setAdapter(Adapter.new(MyDriver.new()))

ORM.migrations(migrations)​

Enregistre une liste de migrations a appliquer.

Parametres​

ParametreTypeRequisDescription
migrationstable[]OuiListe de migrations avec name, up, down

Exemple​

OrvexORM.migrations({
{
name = "001_create_users",
up = function(schema)
schema:create("users", function(t)
t:primaryString("identifier", 60)
t:integer("money")
t:string("job")
end)
end,
down = function(schema)
schema:drop("users")
end,
},
})

ORM.migrate(adapter?)​

Execute toutes les migrations en attente.

Parametres​

ParametreTypeRequisDescription
adapterOrvexAdapterNonAdaptateur personnalise (utilise le defaut sinon)

Retour​

number — Le nombre de migrations appliquees.

Exemple​

local count = OrvexORM.migrate()
print(count .. " migration(s) appliquee(s)")

ORM.rollback(adapter?)​

Annule le dernier lot de migrations.

Parametres​

ParametreTypeRequisDescription
adapterOrvexAdapterNonAdaptateur personnalise (utilise le defaut sinon)

Retour​

number — Le nombre de migrations annulees.

Exemple​

local count = OrvexORM.rollback()
print(count .. " migration(s) annulee(s)")

ORM.raw(sql, params?)​

Execute une requete SQL brute (SELECT) et retourne les lignes.

local rows = OrvexORM.raw("SELECT * FROM users WHERE money > ?", { 1000 })

ORM.rawExec(sql, params?)​

Execute une requete SQL brute (INSERT/UPDATE/DELETE).

OrvexORM.rawExec("UPDATE users SET money = money + ? WHERE job = ?", { 100, "police" })

ORM.debug(enabled)​

Active ou desactive le mode debug. Quand active, toutes les requetes SQL sont affichees dans la console.

OrvexORM.debug(true) -- Active les logs SQL
OrvexORM.debug(false) -- Desactive les logs

ORM.seed(fn)​

Execute une fonction de seed pour remplir la base de donnees avec des donnees initiales.

OrvexORM.seed(function(orm)
local User = orm.model("users", { identifier = "string", money = "number" })
User.create({ identifier = "license:admin", money = 99999 })
User.create({ identifier = "license:test", money = 500 })
end)

ORM.introspect(tableName, adapter?)​

Analyse une table MySQL existante et retourne sa definition de champs et sa cle primaire. Utilise DESCRIBE en interne.

Parametres​

ParametreTypeRequisDescription
tableNamestringOuiNom de la table MySQL a analyser
adapterOrvexAdapterNonAdaptateur personnalise

Retour​

table<string, OrvexFieldType>, string — Les champs detectes et le nom de la cle primaire.

Mapping des types MySQL​

Type MySQLType OrvexORM
int, bigint, float, double, decimal"number"
varchar, char, text, enum"string"
tinyint(1)"boolean"
json"json"
date"date"
datetime"datetime"
timestamp"timestamp"

Exemple​

local fields, pk = OrvexORM.introspect("users")
-- fields = { id = "number", name = "string", money = "number", ... }
-- pk = "id"

-- Creer un modele automatiquement
local User = OrvexORM.model("users", fields, { primaryKey = pk })

ORM.fromTable(tableName, opts?)​

Raccourci qui combine introspect() et model() : analyse la table et cree le modele automatiquement.

local User = OrvexORM.fromTable("users")
-- Equivalent a :
-- local fields, pk = OrvexORM.introspect("users")
-- local User = OrvexORM.model("users", fields, { primaryKey = pk })

ORM.unpack()​

Retourne les fonctions les plus courantes pour eviter de repeter OrvexORM. partout.

Retour​

function, function, function, function — model, raw, migrate, transaction

Exemple​

local model, raw, migrate, transaction = OrvexORM.unpack()

local User = model("users", { identifier = "string", money = "number" })
local rows = raw("SELECT * FROM logs")
migrate()