Création de la base de données
Pour le moment j’ai créé une base minimum pour test, il s’agit de 4 tables :
La table users qui en fait est incluse dans le package de démarrage de Laravel mais que j’ai modifiée en ajoutant une clé étrangère vers la table profiles et une vers la table languages.
La table profiles qui permettra de définir des droits spécifiques aux utilisateurs.
La table languages qui permettra d’afficher les textes dans la langue de l’utilisateur.
La table configuration qui permettra d’enregistrer les données de configuration du site, j’ai une préférence pour la méthode Prestashop à ce niveau, une gestion centralisée des données de config avec une normalisation des noms.
Laravel possède une commande spéciale pour la création / modification de la base de données dont la documentation se trouve ici, j’utiliserai pour ma part la commande :
php artisan migrate:fresh --seed
Cette commande permet donc de créer la base, la directive fresh indique qu’il faut tout supprimer et tout refaire, sans cette directive le moteur ne créera que les tables inexistantes. l’option –seed indique à Laravel d’exécuter les opérations de remplissage par défaut.
La structure du répertoire de gestion des bases de données est la suivante :
Elle se décompose en trois sous-répertoires :
factories : répertoire qui contient les fichiers servant à initialiser des données dans la base, il s’agit de données par défaut ou de test, ces fichiers ne sont en aucun cas obligatoires.
migrations : répertoire qui contient les fichiers servant à créer les tables de la base lors de l’installation ou leur suppression.
seeders : répertoire qui contient les fichiers servant a appeler les fichiers factories, et qui sont exécutés si l’option –seed est utilisée.
Voici donc un exemple de ce qui est exécuté lors de l’appel de la commande migrate :
Dans les fichiers migrations, la structure de création d’une table ressemble à :
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(Language::class); // Permet d'indiquer une clé étrangère sur une autre table
$table->string('name');
});
Dans les fichiers seeders, on peut créer des lignes de différentes façons :
User::factory(X)->create();
Ce qui aura pour conséquence d’appeler le fichier UserFactory pour créer X objets
User::factory()->create(['key' => 'Value', ...]);
Ce qui aura pour conséquence d’appeler le fichier UserFactory pour créer un objet pour lequel on défini une ou plusieurs valeur(s) fixe(s)
User::factory()->count(X)->sequence(['key' => 'Value'], ...])->create();
Ce qui aura pour conséquence d’appeler le fichier UserFactory pour créer X objets pour lequels on défini une ou plusieurs valeur(s) fixe(s)
Dans les fichiers factories, la création des données de test ou par défaut sera réalisée, il y a plusieurs méthodes répertoriées sur la documentation, il faut juste savoir qu’on pourra choisir de mettre des valeurs fixes, des liens vers d’autres factories pour les clés étrangères ou de faire appel à la classe fake, cette dernière permettra de générer des données en fonction d’un format fourni.
Exemple d’une fonction de création de données :
public function definition(): array {
return [
'first_name' => fake()->firstName(),
'last_name' => fake()->lastName(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'profile_id' => Profile::factory(),
'remember_token' => Str::random(10),
];
}
A noter, si on appelle cette fonction en lui passant un paramètre, ce dernier sera pris en compte au lieu du résultat du fake.
User::factory()->create(['
first_name
' => 'Toto']);
Créera un utilisateur dont le prénom sera Toto
Cette partie est terminée, il existe bien d’autres choses disponibles, n’hésitez pas à consulter la doc si besoin.