Aller au contenu principal

Référence du Schema Builder

Ceci est la référence complète de l'API du Schema Builder de Sarah. Toutes les méthodes sont disponibles lors de la définition des migrations ou de la construction de requêtes.

Types de Colonnes

uuid

Crée une colonne UUID/VARCHAR(36).

// Définition seule
table.uuid("player_id");

// Avec valeur
table.uuid("player_id", playerUuid);

string

Crée une colonne VARCHAR.

// Définition avec longueur
table.string("name", 64);

// Avec valeur
table.string("name", playerName);

text

Crée une colonne TEXT pour les chaînes plus longues.

table.text("description");

longText

Crée une colonne LONGTEXT pour les contenus très longs.

table.longText("content");

integer

Crée une colonne INT.

table.integer("count");

bigInt

Crée une colonne BIGINT.

// Définition seule
table.bigInt("balance");

// Avec valeur
table.bigInt("balance", 1000L);

decimal

Crée une colonne DECIMAL.

// Précision par défaut
table.decimal("price");

// Précision personnalisée (10 chiffres au total, 2 après la virgule)
table.decimal("price", 10, 2);

// Avec valeur
table.decimal("price", 99.99);

bool

Crée une colonne TINYINT(1)/BOOLEAN.

// Définition seule
table.bool("is_active");

// Avec valeur
table.bool("is_active", true);

json

Crée une colonne JSON.

table.json("metadata");

blob

Crée une colonne BLOB pour les données binaires.

// Définition seule
table.blob("data");

// Avec tableau d'octets
table.blob("data", byteArray);

// Avec objet (auto-sérialisé)
table.blob("data", myObject);

date

Crée une colonne DATE.

table.date("birth_date", new Date());

timestamp

Crée une colonne TIMESTAMP.

table.timestamp("verified_at");

object

Stocke n'importe quel objet (sérialisé).

table.object("settings", settingsObject);

Auto Incrémentation

autoIncrement

Crée une clé primaire INT auto-incrémentée.

table.autoIncrement("id");

autoIncrementBigInt

Crée une clé primaire BIGINT auto-incrémentée.

table.autoIncrementBigInt("id");

Modificateurs de Colonnes

primary

Marque la colonne comme clé primaire.

table.uuid("uuid").primary();

nullable

Autorise les valeurs NULL.

table.string("nickname", 32).nullable();

unique

Ajoute une contrainte UNIQUE.

table.string("email", 255).unique();

// Ou avec booléen explicite
table.string("email", 255).unique(true);

defaultValue

Définit une valeur par défaut.

table.bigInt("balance").defaultValue(0);
table.string("status", 16).defaultValue("pending");
table.bool("active").defaultValue(true);

defaultCurrentTimestamp

Définit la valeur par défaut à CURRENT_TIMESTAMP.

table.timestamp("created_at").defaultCurrentTimestamp();

foreignKey

Crée une relation de clé étrangère.

// Basique (référence la colonne 'id')
table.uuid("user_id").foreignKey("users");

// Avec colonne personnalisée et suppression en cascade
table.uuid("user_id").foreignKey("users", "uuid", true);

Aides pour les Timestamps

timestamps

Ajoute les colonnes created_at et updated_at.

table.timestamps();

createdAt

Ajoute seulement la colonne created_at.

table.createdAt();

updatedAt

Ajoute seulement la colonne updated_at.

table.updatedAt();

Conditions WHERE

where

Égalité ou comparaison basique.

// Égalité
table.where("name", "Steve");
table.where("uuid", playerUuid);

// Comparaison
table.where("balance", ">", 1000);
table.where("level", ">=", 10);
table.where("score", "<", 50);
table.where("rank", "<=", 100);
table.where("status", "!=", "banned");

whereNull

Vérifie les valeurs NULL.

table.whereNull("deleted_at");

whereNotNull

Vérifie les valeurs non-NULL.

table.whereNotNull("verified_at");

whereIn

Vérifie si la valeur est dans une liste.

// Varargs
table.whereIn("status", "active", "pending", "review");

// Liste
table.whereIn("name", Arrays.asList("Steve", "Alex"));

// Avec préfixe de table
table.whereIn("users", "status", statusList);

Opérations JOIN

leftJoin

table.leftJoin(
"users", // Table primaire
"u", // Alias
"uuid", // Colonne primaire
"orders", // Table étrangère
"user_uuid" // Colonne étrangère
);

rightJoin

table.rightJoin("users", "u", "uuid", "orders", "user_uuid");

innerJoin

table.innerJoin("users", "u", "uuid", "orders", "user_uuid");

fullJoin

table.fullJoin("users", "u", "uuid", "orders", "user_uuid");

Join avec Condition Supplémentaire

JoinCondition condition = new JoinCondition(...);
table.leftJoin("users", "u", "uuid", "orders", "user_uuid", condition);

Options SELECT

addSelect

Spécifier les colonnes à sélectionner.

table.addSelect("name");
table.addSelect("users", "name"); // Avec préfixe de table
table.addSelect("users", "name", "userName"); // Avec alias
table.addSelect("users", "name", "userName", "Unknown"); // Avec défaut

distinct

Sélectionner seulement les lignes distinctes.

table.distinct();

orderBy

Trier les résultats par ordre croissant.

table.orderBy("name");

orderByDesc

Trier les résultats par ordre décroissant.

table.orderByDesc("created_at");

Types de Schema

Sarah utilise différents types de schema pour différentes opérations :

TypeDescriptionCréé Par
CREATECréer une nouvelle tableSchemaBuilder.create()
ALTERModifier une table existanteSchemaBuilder.alter()
DROPSupprimer une tableSchemaBuilder.drop()
RENAMERenommer une tableSchemaBuilder.rename()
INSERTInsérer des donnéesSchemaBuilder.insert()
UPSERTInsérer ou mettre à jourSchemaBuilder.upsert()
UPDATEMettre à jour des donnéesSchemaBuilder.update()
SELECTRequêter des donnéesSchemaBuilder.select()
SELECT_COUNTCompter les lignesSchemaBuilder.selectCount()
DELETESupprimer des donnéesSchemaBuilder.delete()
CREATE_INDEXCréer un indexSchemaBuilder.createIndex()

Méthodes Statiques du SchemaBuilder

create

Créer une nouvelle table.

Schema schema = SchemaBuilder.create(migration, "users", table -> {
table.uuid("uuid").primary();
table.string("name", 64);
});

create (depuis template)

Créer une table depuis un template de classe.

Schema schema = SchemaBuilder.create(migration, "users", UserDTO.class);

alter

Modifier une table existante.

Schema schema = SchemaBuilder.alter(migration, "users", table -> {
table.string("email", 255).nullable();
});

drop

Supprimer une table.

Schema schema = SchemaBuilder.drop(migration, "old_table");

rename

Renommer une table.

Schema schema = SchemaBuilder.rename(migration, "old_name", "new_name");

createIndex

Créer un index.

Schema schema = SchemaBuilder.createIndex(migration, "users", "email");

insert

Insérer des données.

Schema schema = SchemaBuilder.insert("users", table -> {
table.uuid("uuid", uuid);
table.string("name", name);
});

upsert

Insérer ou mettre à jour des données.

Schema schema = SchemaBuilder.upsert("users", table -> {
table.uuid("uuid", uuid).primary();
table.string("name", name);
});

update

Mettre à jour des données.

Schema schema = SchemaBuilder.update("users", table -> {
table.string("name", newName);
table.where("uuid", uuid);
});

select

Requêter des données.

Schema schema = SchemaBuilder.select("users");

selectCount

Compter les lignes.

Schema schema = SchemaBuilder.selectCount("users");

delete

Supprimer des données.

Schema schema = SchemaBuilder.delete("users");

Méthodes d'Exécution

execute

Exécuter l'opération du schema.

int affectedRows = schema.execute(databaseConnection, logger);

executeSelect

Exécuter une requête SELECT.

List<Map<String, Object>> results = schema.executeSelect(databaseConnection, logger);

executeSelect (avec mapping)

Exécuter SELECT et mapper vers des objets.

List<UserDTO> users = schema.executeSelect(UserDTO.class, databaseConnection, logger);

executeSelectCount

Exécuter une requête COUNT.

long count = schema.executeSelectCount(databaseConnection, logger);

Exemple Complet

public class UserRepository {
private final RequestHelper helper;

public void createUser(User user) {
helper.upsert("users", schema -> {
schema.uuid("uuid", user.getUuid()).primary();
schema.string("name", user.getName());
schema.string("email", user.getEmail()).unique();
schema.bigInt("balance", user.getBalance()).defaultValue(0);
schema.bool("is_premium", user.isPremium()).defaultValue(false);
schema.text("bio").nullable();
schema.json("settings");
schema.timestamps();
});
}

public List<User> findPremiumUsers() {
return helper.select("users", User.class, table -> {
table.where("is_premium", true);
table.whereNotNull("email");
table.orderByDesc("balance");
});
}

public List<User> searchUsers(String query) {
return helper.select("users", User.class, table -> {
table.where("name", "LIKE", "%" + query + "%");
});
}

public void deleteInactiveUsers(Date threshold) {
helper.delete("users", table -> {
table.where("last_login", "<", threshold);
table.where("is_premium", false);
});
}
}
Copyright © 2026 GroupeZ|Build #loading...|-