laravel database migrations
Ce didacticiel explique la gestion de la base de données Laravel, les migrations, l'amorçage, les requêtes SQL brutes, les modèles éloquents, les relations éloquentes, Artisan et Tinker:
Dans le tutoriel précédent de Série de didacticiels Laravel , nous avons découvert l'architecture, l'installation et les composants du framework Laravel. Nous avons vu la structure du projet PHP Laravel en détail.
Dans ce didacticiel, nous aborderons la base de données Laravel, les migrations, l'amorçage, l'exécution de requêtes SQL brutes, les modèles éloquents, les relations éloquentes, l'artisan et le bricoleur. Nous avons utilisé la version 7 de Laravel dans tous les exemples.
Ce que vous apprendrez:
Interaction avec la base de données Laravel
Le framework Laravel interagit avec les bases de données en utilisant SQL brut, le générateur de requêtes fluide, et le ORM éloquent . Il prend en charge les quatre bases de données suivantes.
- MySQL version 5.6+
- PostgreSQL (Postgres) version 9.4+
- SQLite version 3.8.8+
- SQL Server version 2017+
Étapes pour connecter votre projet à la base de données MySQL:
Étape 1: Créer un nouveau base de données nommé db_ académie (vous pouvez utiliser n'importe quel nom approprié) via phpMyadmin ou HeidiSQL .
Étape 2: Créez un nouveau projet nommé académie (vous pouvez utiliser n'importe quel nom approprié).
Remarque:Veuillez consulter notre précédent didacticiel, Didacticiel Laravel pour les débutants 1, si vous ne savez pas comment installer Laravel et créer un nouveau projet.
Étape 3: Ouvrez le projet dans un IDE et ouvrez le .env déposer. Changer la valeur de DB_DATABASE (nom de la base de données) à db_ academy (vous pouvez utiliser n'importe quel nom approprié). Les deux nom de la base de données et la valeur du DB_DATABASE dans le .env le fichier doit être le même.
Noter : Vous devrez peut-être modifier d'autres paramètres de base de données dans le fichier .env tels que DB_USERNAME, DB_PASSWOD, etc. en fonction de la configuration de votre base de données.
La capture d'écran suivante montre la configuration de la base de données dans le fichier .env.
Laravel Migrations
Laravel Migration est une fonction spéciale utilisée pour créer une table de base de données. Par défaut, le xxxx_xx_xx_xxxxxx _create_users_table.php fichier et le xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php fichier sont inclus.
Structure d'une migration Laravel
La classe Laravel Migration utilise les deux méthodes suivantes:
- La méthode up (): Cette méthode est utilisée pour créer une nouvelle table, colonne ou index dans la base de données.
- La méthode down (): Cette méthode est utilisée pour supprimer une table, une colonne ou un index existant dans la base de données. Cette méthode est la méthode opposée à la méthode up ().
Créer une migration Laravel
Exécutez la commande suivante dans l'invite de commande pour créer une migration appelée create_tutors_table .
php artisan make:migrationcreate_tutors_table
L'exécution de la commande ci-dessus créera un fichier nommé xxxx_xx_xx_xxxxxx_create_tutors_table.php dans le base de données / migrations annuaire.
Ouvrez le xxxx_xx_xx_xxxxxx_create_tutors_table.php et modifiez le code existant comme indiqué ci-dessous.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Exécution de migrations Laravel
Exécutez la commande suivante dans l'invite de commande pour exécuter toutes les migrations disponibles.
php artisan migrate
La commande ci-dessus créera les tables pertinentes dans la base de données comme indiqué ci-dessous.
Annulation des migrations
# 1) Annulation du dernier lot de migrations
Exécutez la commande suivante dans l'invite de commande pour restaurer le dernier lot de migrations (il peut inclure des migrations simples ou multiples).
php artisan migrate:rollback
# 2) Rétrograder les migrations fournissant l'étape
Exécutez la commande suivante dans l'invite de commande pour restaurer le deux dernières migrations .
php artisan migrate:rollback --step=2
# 3) Restauration de toutes les migrations de l'application
Exécutez la commande suivante dans l'invite de commande pour annuler toutes les migrations de l'application.
php artisan migrate:reset
# 4) Revenir en arrière et migrer à l'aide d'une seule commande
Exécutez la commande suivante dans l'invite de commande pour revenir en arrière et migrer en utilisant une seule commande.
php artisan migrate:refresh
# 5) Rolling Back and Migrate Limited no. des migrations
Exécutez la commande suivante dans l'invite de commande pour revenir en arrière et migrer les deux dernières migrations en utilisant une seule commande.
php artisan migrate:refresh --step=2
# 6) Supprimer toutes les tables et migrer
Exécutez la commande suivante dans l'invite de commande pour supprimer toutes les tables et migrer .
php artisan migrate:fresh
Semis Laravel
Lorsque vous développez une application, vous avez besoin de données pour tester l'application. L'amorçage est utilisé pour insérer des données de test dans la base de données.
Créer un semoir
Étape 1: Exécutez la commande suivante dans l'invite de commande pour créer un semeur appelé UserSeeder .
php artisan make:seederUserSeeder
Cette commande créera un fichier nommé UserSeeder.php dans le base de données / semences annuaire.
Étape 2: Ouvrez le UserSeeder.php et modifiez le code existant comme indiqué ci-dessous.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
Étape 3: Ouvrez le Fichier DatabaseSeeder.php dans le base de données / semences répertoire et modifiez le code existant comme indiqué ci-dessous.
call(UserSeeder::class); } }
Noter : Le Base de donnéesSeeder class est utilisé pour appeler d'autres classes de départ.
Semoirs en cours d'exécution
Étape 1: Exécutez la commande suivante dans l'invite de commande pour régénérer le chargeur automatique de Composer .
composer dump-autoload
Étape 2: Exécutez la commande suivante dans l'invite de commande pour exécuter le Base de donnéesSeeder classer.
php artisan db:seed
Au lieu d'exécuter la commande ci-dessus, vous pouvez exécuter la commande suivante dans l'invite de commande pour exécuter le UserSeeder classer.
php artisan db:seed --class= UserSeeder
Noter : Exécutez la commande suivante dans l'invite de commande pour supprimer toutes les tables et réexécuter toutes les migrations .
php artisan migrate:fresh --seed
Étape 3: Vérifiez les données insérées avec la base de données.
La base de données affichera une sortie similaire à celle ci-dessous:
Exécution de requêtes SQL brutes
Exécution d'une requête d'insertion
Étape 1: Ajoutez le segment de code suivant dans le routes / web.php fichier pour insérer un nouvel enregistrement dans le tuteurs table.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
Étape 2: Visitez l'URL: http: //academy.test/insert
Étape 3: Vérifiez les données insérées avec la base de données.
La base de données affichera une sortie similaire à la capture d'écran suivante.
Exécution d'une requête de sélection
Étape 1: Ajoutez le segment de code suivant dans le routes / web.php fichier pour récupérer les données du tuteurs table qui a un identifiant égale à deux .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
Étape 2: Visitez l'URL: http: /academy.test/select
Étape 3: Le navigateur affichera une sortie similaire à la capture d'écran suivante.
Exécution d'une requête de mise à jour
Étape 1: Ajoutez le segment de code suivant dans le routes / web.php fichier pour mettre à jour l'enregistrement dans le tuteurs table qui a un identifiant égale à 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
Étape 2: Visitez l'URL suivante: http: //academy.test/update
Étape 3: Vérifiez les données mises à jour avec la base de données.
La base de données affichera une sortie similaire à l'image ci-dessous:
Exécution d'une requête de suppression
Étape 1: Ajoutez le segment de code suivant dans le routes / web.php fichier pour supprimer l'enregistrement dans le tuteurs table qui a un identifiant égale à 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
Étape 2: Visitez l'URL: http: //academy.test/delete
Étape 3: Vérifiez les données supprimées avec la base de données.
La base de données affichera une sortie similaire à l'image ci-dessous:
Modèles éloquents de Laravel
Dans l'architecture MVC, le personnage M signifie Modèle . Un modèle gère les données utilisées par l'application. Tous les modèles sont stockés dans le app annuaire. Le Utilisateur maquette ( User.php) est le modèle par défaut. Chaque table de la base de données peut avoir un modèle Eloquent correspondant. Par exemple, Tutor le modèle stocke les données dans tuteurs table.
Remarque: Le nom pluriel de la classe sera utilisé comme nom de table, sauf indication contraire.
Créer un modèle éloquent
Exécutez la commande suivante dans l'invite de commande pour créer un modèle nommé Tuteur .
php artisan make:model Tutor
Cette commande créera un fichier nommé Tutor.php dans le app annuaire.
Au lieu de la commande ci-dessus, vous pouvez exécuter la commande suivante dans l'invite de commande pour créer un migration de base de données lors de la création du modèle.
php artisan make:modelTutor --migration
Ou
php artisan make:modelTutor -m
Les deux commandes ci-dessus fourniront le même résultat.
Insérer des données
Étape 1: Ajoutez le segment de code suivant dans le routes / web.php fichier pour insérer un nouvel enregistrement dans le tuteurs table.
meilleur système de point de vente pour ipad
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
Noter : Mettez le trait ' utiliser App Tutor ' dans le routes / web.php fichier comme indiqué ci-dessous.
Étape 2: Visitez l'URL suivante: http: //academy.test/insert-data
Étape 3: Vérifiez les données insérées avec la base de données.
La base de données affichera une sortie similaire à l'image ci-dessous:

Trouver des données
Étape 1: Ajoutez le segment de code suivant dans le routes / web.php fichier pour trouver / récupérer l'enregistrement dans le tuteurs table qui a un identifiant égale à deux .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
Étape 2: Visitez l'URL suivante: http: //academy.test/find-data
Étape 3: Le navigateur affichera une sortie similaire à l'image ci-dessous:

Mettre à jour les données
Étape 1: Ajoutez le segment de code suivant dans le routes / web.php fichier pour mettre à jour l'enregistrement dans le tuteurs table qui a un identifiant égale à deux .
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
ou
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
Étape 2: Visitez l'URL suivante: http: //academy.test/update-data
Étape 3: Vérifiez les données mises à jour avec la base de données.
La base de données affichera une sortie similaire à l'image ci-dessous:

Suprimmer les données
Étape 1: Ajoutez le segment de code suivant dans le routes / web.php fichier pour supprimer l'enregistrement dans le tuteurs table qui a un identifiant égale à deux .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
Étape 2: Visitez l'URL suivante: http: //academy.test/delete-data
Étape 3: Vérifiez les données supprimées avec la base de données.
La base de données affichera une sortie similaire à l'image ci-dessous:

Suppression logicielle des données
Au lieu de supprimer des données de la base de données, la suppression logicielle définit un attribut appelé supprimé_at sur le modèle et insérez-le dans la table de base de données.
Utilisez la caractéristique suivante pour activer la suppression réversible.
Illuminate Database Eloquent SoftDeletes
Le segment de code suivant peut être utilisé pour supprimer des données.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
Obtenir des données de suppression logicielle
Le avecTrashed () méthode peut être utilisée pour obtenir des données de suppression logicielle comme indiqué ci-dessous.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
Restaurer les données de suppression logicielle
Le restaurer() méthode peut être utilisée pour restaurer les données de suppression logicielle comme indiqué ci-dessous.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
Supprimer les données définitivement
Le forceDelete () méthode peut être utilisée pour supprimer définitivement les données comme indiqué ci-dessous.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Relations éloquentes Laravel
Une relation éloquente permet de lier facilement les tables de la base de données.
Types de relations éloquents
La liste suivante montre les différents types de relations éloquentes:
- Relation individuelle
- Relation un-à-plusieurs
- Relation plusieurs à plusieurs
- A une relation unique
- Relation à plusieurs
- Relation un-à-un (polymorphe)
- Relation un-à-plusieurs (polymorphe)
- Relation plusieurs-à-plusieurs (polymorphe)
# 1) Relation individuelle
Description: C'est la relation un-à-un entre les colonnes de différentes tables.
Exemple de relation un-à-un:
hasOne('AppBook); } }
Exemple de relation un-à-un (inverse):
belongsTo('App Author); } }
# 2) Relation un-à-plusieurs
Description: Dans ce type de relation, un modèle possède n'importe quel nombre d'autres modèles.
Exemple de relation un-à-plusieurs:
hasMany('AppReview'); } }
Exemple de relation un-à-plusieurs (inverse):
belongsTo('AppTutorial'); } }
# 3) Relation plusieurs à plusieurs
Description: C'est une relation plus compliquée que les relations un-à-un et un-à-plusieurs, et vous devez créer un tableau croisé dynamique pour définir une telle relation.
Exemple de relation plusieurs-à-plusieurs:
belongsToMany('AppBook); } }
Relation plusieurs-à-plusieurs (inverse) Exemple:
belongsToMany('AppAuthor); } }
# 4) Une relation unique
Description: Il relie les modèles via une seule relation intermédiaire.
Exemple de relation directe:
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Relation multiple
Description: Il permet d'accéder à des relations distantes ou intermédiaires de manière simple.
Exemple de relation has-many-through:
où est la clé de sécurité du réseau?
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) Relation un-à-un (polymorphe)
Description: C'est similaire à une relation un-à-un, mais le modèle cible peut appartenir à plusieurs types de modèle sur une même association.
Exemple de relation un-à-un (polymorphe):
morphTo(); } } class Article extends Model { /** * Get the article's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); } } class Author extends Model { /** * Get the author's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); }
# 7) Relation un-à-plusieurs (polymorphe)
Description: Elle est similaire à une relation un-à-plusieurs mais le modèle cible peut appartenir à plusieurs types de modèle sur une même association.
Exemple de relation un-à-plusieurs (polymorphe):
morphTo(); } } class Article extends Model { /** * Get all of the article's comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } } class Audio extends Model { /** * Get all of the audio’s comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } }
# 8) Relation plusieurs-à-plusieurs (polymorphe)
Description: Dans ce type de relation, le modèle cible possède des enregistrements uniques qui peuvent être partagés entre les autres modèles.
Exemple de relation plusieurs-à-plusieurs (polymorphe):
morphToMany('AppComment, commentable); } }
Laravel Artisan
Dans le tutoriel précédent, nous avons appris que Artisan est un interface de ligne de commande ( CLI ).
Commandes artisanales
Exécutez la commande suivante dans l'invite de commande pour afficher tous les Commandes artisanales .
php artisan
La capture d'écran suivante montre la sortie de la commande ci-dessus.

Le tableau suivant montre quelques-unes des commandes artisanales importantes avec leurs fonctionnalités respectives, qui sont tirées de la sortie de la commande ci-dessus (php artisan).
Commander Fonctionnalité cache: effacer Vider le cache de l'application aider Affiche l'aide pour une commande liste Commandes de listes émigrer Exécutez les migrations de base de données test Exécutez les tests d'application bricoler Interagissez avec votre application auth: clear-resets Vider les jetons de réinitialisation de mot de passe expirés db: graine Graver la base de données avec des enregistrements liste des événements Lister les événements et les écouteurs de l'application clé: générer Définir la clé d'application faire: canal Créer une nouvelle classe de chaîne faire: composant Créer une nouvelle classe de composant de vue faire: contrôleur Créer une nouvelle classe de contrôleur make: événement Créer une nouvelle classe d'événements faire: usine Créer une nouvelle fabrique de modèles make: auditeur Créer une nouvelle classe d'écouteur d'événements faire: mail Créer une nouvelle classe de messagerie faire: middleware Créer une nouvelle classe middleware make: migration Créer un nouveau fichier de migration marque: modèle Créer une nouvelle classe de modèle éloquent faire: notification Créer une nouvelle classe de notification faire: observateur Créer une nouvelle classe d'observateur faire: politique Créer une nouvelle classe de stratégie make: fournisseur Créer une nouvelle classe de fournisseur de services faire: ressource Créer une nouvelle ressource faire: semoir Créer une nouvelle classe de semoir faire: tester Créer une nouvelle classe de test migrer: frais Supprimez toutes les tables et réexécutez toutes les migrations migrer: actualiser Réinitialiser et réexécuter toutes les migrations migrer: réinitialiser Annuler toutes les migrations de bases de données migrer: restauration Annuler la dernière migration de base de données notifications: table Créer une migration pour la table des notifications route: liste Lister tous les itinéraires enregistrés stockage: lien Créer les liens symboliques configurés pour l'application
Laravel bricoler
Tinker est un REPL (READ-EVAL-PRINT-LOOP) qui vous permet d'interagir avec l'application sur la ligne de commande. Bricoler interagit avec une base de données sans enregistrer les routes.
Tinker utiliser avec Artisan, et il inclut par défaut.
Activation de l'environnement Tinker
Exécutez la commande suivante dans l'invite de commande pour activer l'environnement Tinker.
php artisan tinker
La capture d'écran suivante montre la sortie de la commande ci-dessus.

Insérer des données avec Tinker
Exécutez les commandes suivantes dans l'invite de commande pour insérer un nouvel enregistrement dans le utilisateurs table.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
La base de données affichera une sortie similaire à la capture d'écran suivante.

Trouver des données avec Tinker
Exécutez la commande suivante dans l'invite de commande pour trouver / récupérer l'enregistrement qui a un identifiant égal à deux dans le utilisateurs table.
$user = AppUser::find(2);
L'invite de commande affichera une sortie similaire à la capture d'écran suivante.

Mettre à jour les données avec Tinker
Exécutez la commande suivante dans l'invite de commande pour mettre à jour l'enregistrement qui a un identifiant égal à deux dans le utilisateurs table.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
La base de données affichera une sortie similaire à la capture d'écran suivante.

Supprimer les données avec Tinker
Exécutez la commande suivante dans l'invite de commande pour supprimer l'enregistrement qui a un identifiant égal à deux dans le utilisateurs table.
$user = AppUser::find(2); $user->delete();
La base de données affichera une sortie similaire à la capture d'écran suivante.

Conclusion
Le framework Laravel interagit avec les bases de données à l'aide de SQL brut, du générateur de requêtes fluent et de l'ORM Eloquent. Un modèle gère les données utilisées par l'application. Une relation éloquente permet de lier facilement les tables de la base de données.
La migration est une fonction spéciale utilisée pour créer une table de base de données. L'amorçage est utilisé pour insérer des données de test dans la base de données, ce qui est très utile pour le développeur car le développeur a besoin de données pour tester l'application lors du développement. Tinker interagit avec une base de données sans enregistrer les itinéraires.
Nous espérons que vous avez trouvé ce tutoriel utile! Dans le prochain tutoriel, nous discuterons des formulaires, du téléchargement de fichiers, de l'authentification, de l'envoi d'e-mails, de sessions, etc.
Bon apprentissage!
<< PREV Tutorial | Tutoriel SUIVANT >>
lecture recommandée
- Tutoriel Laravel Collection et Laravel Forge
- Formulaires Laravel et règles de validation avec exemple
- Session Laravel, téléchargement / téléchargement de fichiers et autorisations
- Tutoriel PHP Laravel pour les débutants: Qu'est-ce que le framework Laravel
- MongoDB Créer une sauvegarde de base de données
- Test de base de données avec JMeter
- Tutoriel Oracle Database - Qu'est-ce qu'Oracle Database?
- Top 10 des outils de conception de base de données pour créer des modèles de données complexes