laravel database migrations
Aquest tutorial explica el maneig de la base de dades de Laravel, les migracions, la sembra, les consultes SQL en brut, els models eloqüents, les relacions eloqüents, els artesans i els tinkers:
Al tutorial anterior de Sèrie de tutorials Laravel , vam aprendre sobre l’arquitectura, la instal·lació i els components de Laravel Framework. Hem vist l’estructura del projecte Laravel PHP en detall.
En aquest tutorial, tractarem la base de dades de Laravel, migracions, sembra, execució de consultes SQL en brut, models eloqüents, relacions eloqüents, artesanal i Tinker. Hem utilitzat Laravel versió 7 en tots els exemples.
Què aprendreu:
Interacció de la base de dades Laravel
Laravel Framework interactua amb bases de dades mitjançant SQL cru, el constructor de consultes fluït, i la ORM eloqüent . Admet les següents quatre bases de dades.
- MySQL versió 5.6+
- PostgreSQL (Postgres) versió 9.4+
- SQLite versió 3.8.8+
- SQL Server versió 2017+
Passos per connectar el vostre projecte a la base de dades MySQL:
Pas 1: Crea un nou base de dades nomenat db_ acadèmia (podeu utilitzar qualsevol nom adequat) mitjançant phpMyadmin o bé HeidiSQL .
Pas 2: Creeu un projecte nou anomenat acadèmia (podeu utilitzar qualsevol nom adequat).
Nota:Consulteu el nostre tutorial anterior, Tutorial Laravel per a principiants 1, si no sabeu com instal·lar Laravel i crear un projecte nou.
Pas 3: Obriu el projecte en un IDE i obriu el fitxer .env dossier. Canvieu el valor de DB_DATABASE (nom de la base de dades) a db_ academy (podeu utilitzar qualsevol nom adequat). Tant el nom de la base de dades i el valor del fitxer DB_DATABASE al .env fitxer ha de ser el mateix.
Nota : Pot ser que hàgiu de canviar altres paràmetres de la base de dades al fitxer .env, com ara DB_USERNAME, DB_PASSWOD, etc. en funció de la configuració de la vostra base de dades.
La següent captura de pantalla mostra la configuració de la base de dades al fitxer .env.
Migracions Laravel
Laravel Migration és una característica especial que s’utilitza per crear una taula de bases de dades. Per defecte, el fitxer xxxx_xx_xx_xxxxxx _create_users_table.php i el fitxer xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php s’inclouen els fitxers.
Estructura d’una migració de Laravel
La classe de migració Laravel utilitza els dos mètodes següents:
- El mètode up (): Aquest mètode s'utilitza per crear una nova taula, columna o índex a la base de dades.
- El mètode down (): Aquest mètode s’utilitza per deixar caure una taula, columna o índex existent a la base de dades. Aquest mètode és el mètode oposat del mètode up ().
Creació d’una migració de Laravel
Executeu l'ordre següent a l'indicador d'ordres per crear una migració anomenada create_tutors_table .
php artisan make:migrationcreate_tutors_table
L'execució de l'ordre anterior crearà un fitxer anomenat xxxx_xx_xx_xxxxxx_create_tutors_table.php al base de dades / migracions directori.
Obriu el fitxer xxxx_xx_xx_xxxxxx_create_tutors_table.php fitxer i modifiqueu el codi existent com es mostra a continuació.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Execució de les migracions de Laravel
Executeu l'ordre següent a l'indicador d'ordres per executar totes les migracions disponibles.
php artisan migrate
L'ordre anterior crearà les taules rellevants a la base de dades com es mostra a continuació.
Desplaçament de migracions
# 1) Recuperació de l'últim lot de migracions
Executeu l'ordre següent a l'indicador d'ordres per recuperar el fitxer darrer lot de migracions (pot incloure migracions simples o múltiples).
php artisan migrate:rollback
# 2) Invertir les migracions proporcionant el pas
Executeu l'ordre següent a l'indicador d'ordres per recuperar el fitxer dues darreres migracions .
php artisan migrate:rollback --step=2
# 3) Desfer totes les migracions de l'aplicació
Executeu l'ordre següent a l'indicador d'ordres a retrocedeix totes les migracions de l'aplicació.
php artisan migrate:reset
# 4) Tornar enrere i migrar mitjançant una sola ordre
Executeu l'ordre següent a l'indicador d'ordres a retrocedeix i migra utilitzant una sola ordre.
php artisan migrate:refresh
# 5) Retrocés i migració limitada núm. de migracions
Executeu l'ordre següent a l'indicador d'ordres a retrocedeu i migreu les dues darreres migracions utilitzant una sola ordre.
php artisan migrate:refresh --step=2
# 6) Eliminar totes les taules i migrar
Executeu l'ordre següent a l'indicador d'ordres a deixeu anar totes les taules i migreu .
php artisan migrate:fresh
Sembra de Laravel
Quan desenvolupeu una aplicació, necessiteu dades per provar-la. La sembra s’utilitza per inserir dades de proves a la base de dades.
Creació d’un sembrador
Pas 1: Executeu l'ordre següent a l'indicador d'ordres per crear una sembradora anomenada UserSeeder .
php artisan make:seederUserSeeder
Aquesta ordre crearà un fitxer anomenat UserSeeder.php al base de dades / llavors directori.
Pas 2: Obriu el fitxer UserSeeder.php fitxer i modifiqueu el codi existent com es mostra a continuació.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
Pas 3: Obriu el fitxer Fitxer DatabaseSeeder.php al base de dades / llavors i modifiqueu el codi existent com es mostra a continuació.
call(UserSeeder::class); } }
Nota : El DatabaseSeeder class s'utilitza per anomenar altres classes de llavor.
Sembradores en funcionament
Pas 1: Executeu l'ordre següent a l'indicador d'ordres a regenerar el carregador automàtic del compositor .
composer dump-autoload
Pas 2: Executeu l'ordre següent a l'indicador d'ordres per executar el fitxer DatabaseSeeder classe.
php artisan db:seed
En lloc d'executar l'ordre anterior, podeu executar l'ordre següent a l'indicador d'ordres per executar el fitxer UserSeeder classe.
php artisan db:seed --class= UserSeeder
Nota : Executeu l'ordre següent a l'indicador d'ordres a deixeu anar totes les taules i torneu a executar totes les migracions .
php artisan migrate:fresh --seed
Pas 3: Verifiqueu les dades inserides amb la base de dades.
La base de dades mostrarà una sortida similar a la següent:
Execució de consultes SQL en brut
Execució d'una consulta d'inserció
Pas 1: Afegiu el segment de codi següent al fitxer routes / web.php per inserir un registre nou al fitxer tutors taula.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
Pas 2: Visiteu l'URL: http: //academy.test/insert
Pas 3: Verifiqueu les dades inserides amb la base de dades.
La base de dades mostrarà una sortida similar a la següent captura de pantalla.
Execució d’una consulta de selecció
Pas 1: Afegiu el segment de codi següent al fitxer routes / web.php per recuperar dades del fitxer tutors taula que està tenint una identificador és igual a 2 .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
Pas 2: Visiteu l'URL: http: /academy.test/select
Pas 3: El navegador mostrarà una sortida similar a la següent captura de pantalla.
Execució d'una consulta d'actualització
Pas 1: Afegiu el segment de codi següent al fitxer routes / web.php per actualitzar el registre al fitxer tutors taula que està tenint una identificador és igual a 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
Pas 2: Visiteu l'URL següent: http: //academy.test/update
Pas 3: Verifiqueu les dades actualitzades amb la base de dades.
La base de dades mostrarà una sortida similar a la imatge següent:
Execució d’una consulta d’eliminació
Pas 1: Afegiu el segment de codi següent al fitxer routes / web.php per esborrar el registre del fitxer tutors taula que està tenint una identificador és igual a 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
Pas 2: Visiteu l'URL: http: //academy.test/delete
Pas 3: Verifiqueu les dades suprimides amb la base de dades.
La base de dades mostrarà una sortida similar a la imatge següent:
Models eloqüents de Laravel
A l'arquitectura MVC, el personatge M significa Model . Un model gestiona les dades que utilitza l'aplicació. Tots els models s'emmagatzemen a aplicació directori. El Usuari model ( Usuari.php) és el model per defecte. Cada taula de la base de dades pot tenir un model eloqüent corresponent. Per exemple, Tutor model emmagatzema dades a tutors taula.
Nota: El nom plural de la classe s'utilitzarà com a nom de taula tret que s'especifiqui el contrari.
Creació d’un model eloqüent
Executeu l'ordre següent a l'indicador d'ordres per crear un model anomenat tutor .
php artisan make:model Tutor
Aquesta ordre crearà un fitxer anomenat Tutor.php al aplicació directori.
En lloc de l'ordre anterior, podeu executar l'ordre següent a l'indicador d'ordres per crear un fitxer migració de bases de dades en crear el model.
php artisan make:modelTutor --migration
O bé
php artisan make:modelTutor -m
Les dues ordres anteriors proporcionaran la mateixa sortida.
Insereix dades
Pas 1: Afegiu el segment de codi següent al fitxer routes / web.php per inserir un registre nou al fitxer tutors taula.
eines de prova de navegadors creuats de codi obert
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
Nota : Posa el tret ' utilitzeu App Tutor ”Al routes / web.php com es mostra a continuació.
Pas 2: Visiteu l'URL següent: http: //academy.test/insert-data
Pas 3: Verifiqueu les dades inserides amb la base de dades.
La base de dades mostrarà una sortida similar a la imatge següent:

Cerca de dades
Pas 1: Afegiu el segment de codi següent al fitxer routes / web.php per trobar / recuperar el registre al fitxer tutors taula que està tenint una identificador és igual a 2 .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
Pas 2: Visiteu l'URL següent: http: //academy.test/find-data
Pas 3: El navegador mostrarà una sortida similar a la imatge següent:

Actualització de dades
Pas 1: Afegiu el segment de codi següent al fitxer routes / web.php per actualitzar el registre al fitxer tutors taula que està tenint una identificador és igual a 2 .
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
o bé
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
Pas 2: Visiteu l'URL següent: http: //academy.test/update-data
Pas 3: Verifiqueu les dades actualitzades amb la base de dades.
La base de dades mostrarà una sortida similar a la imatge següent:

Suprimeix dades
Pas 1: Afegiu el segment de codi següent al fitxer routes / web.php per esborrar el registre del fitxer tutors taula que està tenint una identificador és igual a 2 .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
Pas 2: Visiteu l'URL següent: http: //academy.test/delete-data
Pas 3: Verifiqueu les dades suprimides amb la base de dades.
La base de dades mostrarà una sortida similar a la imatge següent:

Dades de supressió suau
En lloc de suprimir dades de la base de dades, soft delete defineix un atribut anomenat suprimit_at al model i inseriu-lo a la taula de base de dades.
Utilitzeu el tret següent per activar la supressió suau.
Il·lumina Base de dades Eloqüent SoftDeletes
El següent segment de codi es pot utilitzar per suprimir dades.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
Obteniu dades de supressió suau
El ambTrashed () es pot fer servir el mètode obtenir dades de supressió suau com es mostra a continuació.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
Restaurar dades de supressió suau
El restore () es pot fer servir el mètode restaurar dades de supressió suau com es mostra a continuació.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
Suprimiu les dades permanentment
El forceDelete () es pot fer servir el mètode suprimir dades permanentment com es mostra a continuació.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Relacions eloqüents de Laravel
Una relació eloqüent ajuda a enllaçar fàcilment les taules de bases de dades.
Tipus de relacions eloqüents
La llista següent mostra els diferents tipus de relacions eloqüents:
- Relació individual
- Relació d'un a molts
- Relació de molts a molts
- Té una relació única
- Té una relació de molts
- Relació un a un (polimòrfica)
- Relació d'un a molts (polimòrfica)
- Relació de molts a molts (polimòrfics)
# 1) Relació individual
Descripció: És la relació d'un a un entre les columnes de diferents taules.
Exemple de relació individual:
hasOne('AppBook); } }
Exemple de relació individual (inversa):
belongsTo('App Author); } }
# 2) Relació d'un a molts
Descripció: En aquest tipus de relació, un model posseeix qualsevol altre model.
Exemple de relació d'un a molts:
hasMany('AppReview'); } }
Exemple de relació d'un a molts (invers):
belongsTo('AppTutorial'); } }
# 3) Relació de molts a molts
Descripció: És una relació més complicada que les relacions d'un a un i d'un a molts, i heu de crear una taula dinàmica per definir aquesta relació.
Exemple de relació de molts a molts:
belongsToMany('AppBook); } }
Relació de molts a molts (inversa) Exemple:
belongsToMany('AppAuthor); } }
# 4) Relació única
Descripció: Connecta models mitjançant una única relació intermèdia.
Exemple de relació única:
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Relació amb moltes persones
Descripció: Permet l'accés a relacions llunyanes o intermèdies amb un mètode fàcil.
Exemple de relació amb molts efectes:
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) Relació d'un a un (polimòrfica)
Descripció: És similar a una relació un a un, però el model objectiu pot pertànyer a més d’un tipus de model en una sola associació.
Exemple de relació individual (polimòrfica):
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) Relació d'un a molts (polimòrfica)
Descripció: És similar a una relació d'un a molts, però el model objectiu pot pertànyer a més d'un tipus de model en una sola associació.
Exemple de relació d'un a molts (polimòrfic):
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) Relació de molts a molts (polimòrfics)
Descripció: En aquest tipus de relació, el model objectiu té registres únics que es poden compartir entre els altres models.
Exemple de relació de molts a molts (polimòrfics):
morphToMany('AppComment, commentable); } }
Artesà Laravel
Al tutorial anterior, ho hem après Artesà és un interfície de línia d'ordres ( CLI ).
Ordres Artesans
Executeu l'ordre següent a l'indicador d'ordres per veure tot el disponible Comandaments artesans .
php artisan
La següent captura de pantalla mostra la sortida de l'ordre anterior.

La taula següent mostra algunes de les ordres artesanals importants amb les seves respectives funcionalitats, que s’extreuen de la sortida de l’ordre anterior (php artisan).
Comandament funcionalitat memòria cau: buida Esborreu la memòria cau de l'aplicació ajuda Mostra ajuda per a una ordre llista Llista les ordres migrar Executeu les migracions de bases de dades prova Executeu les proves de l'aplicació joguina Interactua amb la teva sol·licitud auth: esborra els restabliments Esborra les fitxes de restabliment de la contrasenya caducades db: llavor Sembra la base de dades amb registres esdeveniment: llista Enumereu els esdeveniments i els oients de l'aplicació clau: generar Establiu la clau de l'aplicació marca: canal Creeu una nova classe de canal marca: component Creeu una nova classe de components de visualització marca: controlador Creeu una nova classe de controladors fer: esdeveniment Creeu una nova classe d'esdeveniments marca: fàbrica Creeu una nova fàbrica de models fer: oient Creeu una nova classe d'oient d'esdeveniments make: correu Creeu una nova classe de correu electrònic make: middleware Creeu una nova classe de middleware fer: migració Creeu un fitxer de migració nou marca: model Creeu una nova classe de models eloqüents make: notificació Creeu una nova classe de notificacions fer: observador Creeu una nova classe d'observador fer: política Creeu una nova classe de polítiques marca: proveïdor Creeu una nova classe de proveïdor de serveis make: recurs Creeu un recurs nou fer: sembradora Creeu una nova classe de sembradora fer: provar Creeu una nova classe de prova migrar: fresc Suprimiu totes les taules i torneu a executar totes les migracions migrar: actualitzar Restableix i torna a executar totes les migracions migrar: restablir Desplaceu totes les migracions de bases de dades migrar: retrocés Desplaceu l'última migració de la base de dades notificacions: taula Creeu una migració per a la taula de notificacions ruta: llista Enumereu totes les rutes registrades emmagatzematge: enllaç Creeu els enllaços simbòlics configurats per a l'aplicació
Laravel Tinker
Tinker és un REPL (READ-EVAL-PRINT-LOOP) que us permet interactuar amb l’aplicació a la línia d’ordres. Tinker interactua amb una base de dades sense registrar rutes.
Ús de Tinker amb Artisan i inclou per defecte.
convertir YouTube a mp4 d'alta qualitat
Habilitació de l'entorn Tinker
Executeu l'ordre següent a l'indicador d'ordres per habilitar l'entorn Tinker.
php artisan tinker
La següent captura de pantalla mostra la sortida de l'ordre anterior.

Inseriu dades amb Tinker
Executeu les ordres següents a l'indicador d'ordres per inserir un registre nou al fitxer usuaris taula.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
La base de dades mostrarà una sortida similar a la següent captura de pantalla.

Cerqueu dades amb Tinker
Executeu l'ordre següent a l'indicador d'ordres per trobar / recuperar el registre que té identificador igual a 2 al usuaris taula.
$user = AppUser::find(2);
L'indicador d'ordres mostrarà una sortida similar a la següent captura de pantalla.

Actualitzeu les dades amb Tinker
Executeu l'ordre següent a l'indicador d'ordres per actualitzar el registre que té un identificador igual a 2 al usuaris taula.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
La base de dades mostrarà una sortida similar a la següent captura de pantalla.

Eliminar dades amb Tinker
Executeu l'ordre següent a l'indicador d'ordres per suprimir el registre que té identificador igual a 2 al usuaris taula.
$user = AppUser::find(2); $user->delete();
La base de dades mostrarà una sortida similar a la següent captura de pantalla.

Conclusió
Laravel Framework interactua amb les bases de dades mitjançant SQL en brut, el generador de consultes fluid i l’ORM eloqüent. Un model gestiona les dades que utilitza l'aplicació. Una relació eloqüent ajuda a enllaçar fàcilment les taules de bases de dades.
La migració és una característica especial que s’utilitza per crear una taula de base de dades. La sembra s’utilitza per inserir dades de prova a la base de dades que és molt útil per al desenvolupador, ja que el desenvolupador necessita dades per provar l’aplicació quan es desenvolupa. Tinker interactua amb una base de dades sense registrar rutes.
Esperem que aquest tutorial us sigui útil. Al següent tutorial, parlarem de formularis, càrrega de fitxers, autenticació, enviament de correus electrònics, sessions, etc.
Feliç aprenentatge!
<< PREV Tutorial | NEXT Tutorial >>
Lectura recomanada
- Col·lecció Laravel i Tutorial Laravel Forge
- Formularis Laravel i regles de validació amb exemple
- Sessió Laravel, càrrega / descàrrega de fitxers i permisos
- Tutorial de PHP Laravel per a principiants: què és Laravel Framework
- MongoDB Crea una còpia de seguretat de la base de dades
- Proves de bases de dades amb JMeter
- Tutorial Oracle Database: què és Oracle Database?
- Top 10 eines de disseny de bases de dades per crear models de dades complexos