laravel database migrations
Acest tutorial explică gestionarea bazei de date Laravel, migrații, însămânțare, interogări SQL brute, modele elocvente, relații elocvente, Artisan și Tinker:
În tutorialul anterior al Seria de tutoriale Laravel , am aflat despre arhitectura, instalarea și componentele cadrului Laravel. Am văzut în detaliu structura proiectului Laravel PHP.
În acest tutorial, vom acoperi baza de date Laravel, migrații, însămânțare, rularea interogărilor SQL brute, modele elocvente, relații elocvente, artizan și Tinker. Am folosit Laravel versiunea 7 în toate exemplele.
Ce veți învăța:
Interacțiunea bazei de date Laravel
Cadrul Laravel interacționează cu bazele de date folosind SQL brut, generatorul de interogări fluent, si ORM elocvent . Acesta acceptă următoarele patru baze de date.
- MySQL versiunea 5.6+
- PostgreSQL (Postgres) versiunea 9.4+
- SQLite versiunea 3.8.8+
- SQL Server versiunea 2017+
Pași pentru conectarea proiectului la baza de date MySQL:
Pasul 1: Creaza un nou Bază de date numit db_ academie (puteți utiliza orice nume potrivit) prin phpMyadmin sau HeidiSQL .
Pasul 2: Creați un nou proiect numit academie (puteți utiliza orice nume potrivit).
Notă:Vă rugăm să consultați tutorialul nostru anterior, Tutorial Laravel pentru începători 1, dacă nu știți cum să instalați Laravel și să creați un proiect nou.
Pasul 3: Deschideți proiectul într-un IDE și deschideți fișierul .env fişier. Schimbați valoarea DB_DATABASE (numele bazei de date) la db_ academie (puteți utiliza orice nume potrivit). Amandoua numele bazei de date și valoarea DB_DATABASE în .env fișierul trebuie să fie același.
Notă : Poate fi necesar să modificați alți parametri ai bazei de date din fișierul .env, cum ar fi DB_USERNAME, DB_PASSWOD, etc., în funcție de configurația bazei de date.
Următoarea captură de ecran arată configurația bazei de date în fișierul .env.
Laravel Migrations
Laravel Migration este o caracteristică specială utilizată pentru a crea un tabel de baze de date. În mod implicit, fișierul xxxx_xx_xx_xxxxxx _create_users_table.php fișier și xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php fișier sunt incluse.
Structura unei migrații Laravel
Clasa Laravel Migration utilizează următoarele două metode:
- Metoda up (): Această metodă este utilizată pentru a crea un nou tabel, coloană sau index în baza de date.
- Metoda down (): Această metodă este utilizată pentru a fixa un tabel, o coloană sau un index existent în baza de date. Această metodă este metoda opusă metodei up ().
Crearea unei migrații Laravel
Rulați următoarea comandă în promptul de comandă pentru a crea o migrare numită create_tutors_table .
php artisan make:migrationcreate_tutors_table
Executarea comenzii de mai sus va crea un fișier numit xxxx_xx_xx_xxxxxx_create_tutors_table.php în baza de date / migrații director.
Deschide xxxx_xx_xx_xxxxxx_create_tutors_table.php fișierul și modificați codul existent așa cum se arată mai jos.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Rularea Laravel Migrations
Rulați următoarea comandă în promptul de comandă pentru a rula toate migrațiile disponibile.
php artisan migrate
Comanda de mai sus va crea tabelele relevante din baza de date așa cum se arată mai jos.
Revenirea migrațiilor
# 1) Revenirea la ultimul lot de migrații
Rulați următoarea comandă în promptul de comandă pentru a reveni la ultimul lot de migrații (poate include migrații simple sau multiple).
php artisan migrate:rollback
# 2) Revenirea migrațiilor oferind pasul
Rulați următoarea comandă în promptul de comandă pentru a reveni la ultimele două migrații .
php artisan migrate:rollback --step=2
# 3) Revenirea la toate migrațiile aplicației
Rulați următoarea comandă în promptul de comandă pentru reveniți la toate migrațiile a cererii.
php artisan migrate:reset
# 4) Revenire și migrare folosind o singură comandă
Rulați următoarea comandă în promptul de comandă pentru întoarce-te și migrează folosind o singură comandă.
php artisan migrate:refresh
# 5) Revenire și migrare limitată nr. al migrațiilor
Rulați următoarea comandă în promptul de comandă pentru reveniți și migrați ultimele două migrații folosind o singură comandă.
php artisan migrate:refresh --step=2
# 6) Eliminați toate tabelele și migrați
Rulați următoarea comandă în promptul de comandă pentru aruncați toate mesele și migrați .
php artisan migrate:fresh
Semănatul Laravel
Când dezvoltați o aplicație, aveți nevoie de date pentru a testa aplicația. Semănatul este utilizat pentru a insera datele de testare în baza de date.
Crearea unui semănător
Pasul 1: Rulați următoarea comandă în promptul de comandă pentru a crea un semănător numit UserSeeder .
php artisan make:seederUserSeeder
Această comandă va crea un fișier numit UserSeeder.php în baza de date / semințe director.
Pasul 2: Deschide UserSeeder.php fișierul și modificați codul existent așa cum se arată mai jos.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
Pasul 3: Deschide Fișier DatabaseSeeder.php în baza de date / semințe director și modificați codul existent așa cum se arată mai jos.
call(UserSeeder::class); } }
Notă : DatabaseSeeder clasa este utilizată pentru a apela alte clase de semințe.
Semănători care rulează
Pasul 1: Rulați următoarea comandă în promptul de comandă pentru regenerează încărcătorul automat al compozitorului .
composer dump-autoload
Pasul 2: Rulați următoarea comandă în promptul de comandă pentru a rula DatabaseSeeder clasă.
php artisan db:seed
În loc să rulați comanda de mai sus, puteți rula următoarea comandă în promptul de comandă pentru a rula UserSeeder clasă.
php artisan db:seed --class= UserSeeder
Notă : Rulați următoarea comandă în promptul de comandă la renunțați la toate tabelele și executați din nou toate migrările .
php artisan migrate:fresh --seed
Pasul 3: Verificați datele inserate cu baza de date.
Baza de date va afișa rezultate similare cu cele de mai jos:
Rularea interogărilor SQL Raw
Rularea unei interogări Insert
Pasul 1: Adăugați următorul segment de cod în routes / web.php pentru a insera o nouă înregistrare în tutori masa.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
Pasul 2: Accesați adresa URL: http: //academy.test/insert
Pasul 3: Verificați datele inserate cu baza de date.
Baza de date va afișa o ieșire similară cu următoarea captură de ecran.
Rularea unei interogări selectate
Pasul 1: Adăugați următorul segment de cod în routes / web.php fișier pentru a extrage date din tutori masă care are o id egal cu Două .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
Pasul 2: Accesați adresa URL: http: /academy.test/select
Pasul 3: Browserul va afișa o ieșire similară cu următoarea captură de ecran.
Rularea unei interogări de actualizare
Pasul 1: Adăugați următorul segment de cod în routes / web.php fișier pentru a actualiza înregistrarea în tutori masă care are o id egal cu 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
Pasul 2: Accesați următoarea adresă URL: http: //academy.test/update
Pasul 3: Verificați datele actualizate cu baza de date.
Baza de date va afișa rezultate similare cu imaginea de mai jos:
Rularea unei interogări de ștergere
Pasul 1: Adăugați următorul segment de cod în routes / web.php fișier pentru a șterge înregistrarea din tutori masă care are o id egal cu 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
Pasul 2: Accesați adresa URL: http: //academy.test/delete
Pasul 3: Verificați datele șterse cu baza de date.
Baza de date va afișa rezultate similare cu imaginea de mai jos:
Modele elocvente Laravel
În arhitectura MVC, personajul M înseamnă Model . Un model gestionează datele utilizate de aplicație. Toate modelele sunt stocate în aplicație director. Utilizator model ( User.php) este modelul implicit. Fiecare tabel al bazei de date poate avea un model Elocvent corespunzător. De exemplu, Tutor model stochează date în tutori masa.
Notă: Numele plural al clasei va fi folosit ca nume de tabel, cu excepția cazului în care se specifică altfel.
Crearea unui model elocvent
Rulați următoarea comandă în promptul de comandă pentru a crea un model numit Tutore .
php artisan make:model Tutor
Această comandă va crea un fișier numit Tutor.php în aplicație director.
În loc de comanda de mai sus, puteți rula următoarea comandă în promptul de comandă pentru a crea un migrarea bazei de date la crearea modelului.
php artisan make:modelTutor --migration
Sau
php artisan make:modelTutor -m
Ambele comenzi de mai sus vor oferi aceeași ieșire.
Introduceți date
Pasul 1: Adăugați următorul segment de cod în routes / web.php pentru a insera o nouă înregistrare în tutori masa.
cum se folosesc fișiere torrent după descărcare
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
Notă : Puneți trăsătura „ folosiți aplicația Tutor ' în routes / web.php după cum se arată mai jos.
Pasul 2: Accesați următoarea adresă URL: http: //academy.test/insert-data
Pasul 3: Verificați datele inserate cu baza de date.
Baza de date va afișa rezultate similare cu imaginea de mai jos:

Găsiți date
Pasul 1: Adăugați următorul segment de cod în routes / web.php fișier pentru a găsi / prelua înregistrarea în tutori masă care are o id egal cu Două .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
Pasul 2: Accesați următoarea adresă URL: http: //academy.test/find-data
Pasul 3: Browserul va afișa rezultate similare cu imaginea de mai jos:

Actualizați datele
Pasul 1: Adăugați următorul segment de cod în routes / web.php fișier pentru a actualiza înregistrarea în tutori masă care are o id egal cu Două .
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
sau
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
Pasul 2: Accesați următoarea adresă URL: http: //academy.test/update-data
Pasul 3: Verificați datele actualizate cu baza de date.
Baza de date va afișa rezultate similare cu imaginea de mai jos:

Ștergeți datele
Pasul 1: Adăugați următorul segment de cod în routes / web.php fișier pentru a șterge înregistrarea din tutori masă care are o id egal cu Două .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
Pasul 2: Accesați următoarea adresă URL: http: //academy.test/delete-data
Pasul 3: Verificați datele șterse cu baza de date.
Baza de date va afișa rezultate similare cu imaginea de mai jos:

Ștergeți datele soft
În loc să ștergeți date din baza de date, ștergerea soft setează un atribut numit șters_at pe model și introduceți-l în tabelul bazei de date.
Utilizați următoarea caracteristică pentru a activa ștergerea soft.
Iluminează Database Eloquent SoftDeletes
Următorul segment de cod poate fi utilizat pentru ștergerea ușoară a datelor.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
Obțineți date de ștergere soft
cuTrashed () metoda poate fi folosită pentru obțineți date de ștergere soft așa cum se arată mai jos.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
Restabiliți datele de ștergere soft
restabili() metoda poate fi folosită pentru restabiliți datele de ștergere soft așa cum se arată mai jos.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
Ștergeți datele permanent
forceDelete () metoda poate fi folosită pentru ștergeți datele definitiv așa cum se arată mai jos.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Relații elocvente Laravel
O relație elocventă ajută la legarea cu ușurință a tabelelor bazei de date.
Tipuri de relații elocvente
Următoarea listă prezintă diferitele tipuri de relații elocvente:
- Relație unu-la-unu
- Relație unu-la-mulți
- Relație mulți-mulți
- Are o relație one-through
- Are o relație cu mulți
- Relația unu-la-unu (polimorfă)
- Relația unu-la-mulți (polimorfi)
- Relație mulți-mulți (polimorfi)
# 1) Relația unu-la-unu
cum se adaugă depozitul svn în eclipsă
Descriere: Este relația unu-la-unu dintre coloanele diferitelor tabele.
Exemplu de relație unu-la-unu:
hasOne('AppBook); } }
Exemplu de relație unu-la-unu (invers):
belongsTo('App Author); } }
# 2) Relația unu-la-mulți
Descriere: În acest tip de relație, un model deține orice număr de alte modele.
Exemplu de relație unu-la-mulți:
hasMany('AppReview'); } }
Exemplu de relație unu-la-mulți (invers):
belongsTo('AppTutorial'); } }
# 3) Relație Mulți-Mulți
Descriere: Este o relație mai complicată decât relațiile unu-la-unu și unu la mai mulți și trebuie să creați un tabel pivot pentru a defini o astfel de relație.
Exemplu de relații de la mulți la mulți:
belongsToMany('AppBook); } }
Relație dintre mulți (invers) Exemplu:
belongsToMany('AppAuthor); } }
# 4) Relație unică
Descriere: Conectează modelele printr-o singură relație intermediară.
Exemplu de relație de tip one-through:
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Relație cu mulți oameni
Descriere: Permite accesul la relații îndepărtate sau intermediare într-o metodă ușoară.
Exemplu de relații cu mai mulți prin:
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) Relația unu-la-unu (polimorfă)
Descriere: Este similar cu o relație unu-la-unu, dar modelul țintă poate aparține mai multor tipuri de model dintr-o singură asociere.
Exemplu de relație unu-la-unu (polimorf):
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) Relație între mulți (polimorfi)
Descriere: Este similar cu o relație unu-la-mulți, dar modelul țintă poate aparține mai multor tipuri de model dintr-o singură asociere.
Exemplu de relație unu-la-mulți (polimorf):
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) Relație Mulți-Mulți (Polimorfi)
Descriere: În acest tip de relație, modelul țintă are înregistrări unice care pot fi partajate între celelalte modele.
Exemplu de relație mulți-mulți (polimorfi):
morphToMany('AppComment, commentable); } }
Laravel Craftsman
În tutorialul anterior, am învățat asta Artizan este o Linia de comandă ( CLI ).
Comenzi artizanale
Rulați următoarea comandă în promptul de comandă pentru a vizualiza toate cele disponibile Porunci meșteșugărești .
php artisan
Următoarea captură de ecran arată rezultatul comenzii de mai sus.

Tabelul următor prezintă câteva dintre comenzile artizanale importante cu funcționalitățile lor respective, care sunt preluate din ieșirea comenzii de mai sus (php artisan).
Comanda funcționalitate cache: clar Spălați memoria cache a aplicației Ajutor Afișează ajutor pentru o comandă listă Listează comenzile migra Rulați migrațiile bazei de date Test Rulați testele aplicației cositori Interacționați cu aplicația dvs. auth: clear-resets Spălați jetoanele de resetare a parolei expirate db: sămânță Semănați baza de date cu înregistrări eveniment: listă Enumerați evenimentele și ascultătorii aplicației cheie: genera Setați cheia aplicației face: canal Creați o nouă clasă de canal face: componentă Creați o nouă clasă de componente de vizualizare marca: controler Creați o nouă clasă de controler face: eveniment Creați o nouă clasă de evenimente marca: fabrica Creați o nouă fabrică de modele face: ascultător Creați o nouă clasă de ascultător de evenimente make: mail Creați o nouă clasă de e-mail face: middleware Creați o nouă clasă de middleware face: migrare Creați un nou fișier de migrare fa model Creați o nouă clasă de model elocvent face: notificare Creați o nouă clasă de notificări face: observator Creați o nouă clasă de observatori face: politica Creați o nouă clasă de politici make: furnizor Creați o nouă clasă de furnizor de servicii face: resursă Creați o resursă nouă face: semănător Creați o nouă clasă de semănători face: test Creați o nouă clasă de testare migra: fresh Eliminați toate tabelele și relansați toate migrările migra: refresh Resetați și relansați toate migrațiile migrare: resetare Reduceți toate migrările bazei de date migrare: revenire Reduceți ultima migrare a bazei de date notificări: tabel Creați o migrare pentru tabelul de notificări traseu: listă Enumerați toate rutele înregistrate stocare: link Creați legăturile simbolice configurate pentru aplicație
Laravel Tinker
Tinker este un REPL (READ-EVAL-PRINT-LOOP) care vă permite să interacționați cu aplicația din linia de comandă. Cositori interacționează cu o bază de date fără a înregistra rute.
Utilizați Tinker cu Artisan și include în mod implicit.
Activarea mediului Tinker
Rulați următoarea comandă în promptul de comandă pentru a activa mediul Tinker.
php artisan tinker
Următoarea captură de ecran arată rezultatul comenzii de mai sus.

Introduceți date cu Tinker
Rulați următoarele comenzi în promptul de comandă pentru a insera o nouă înregistrare în utilizatori masa.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
Baza de date va afișa o ieșire similară cu următoarea captură de ecran.

Găsiți date cu Tinker
Rulați următoarea comandă în promptul de comandă pentru a găsi / prelua înregistrarea care are un id egal cu Două în utilizatori masa.
$user = AppUser::find(2);
În linia de comandă se va afișa o ieșire similară cu următoarea captură de ecran.

Actualizați datele cu Tinker
Rulați următoarea comandă în promptul de comandă pentru a actualiza înregistrarea care are un id egal cu Două în utilizatori masa.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
Baza de date va afișa o ieșire similară cu următoarea captură de ecran.

Ștergeți datele cu Tinker
Rulați următoarea comandă în promptul de comandă pentru a șterge înregistrarea care are un id egal cu Două în utilizatori masa.
$user = AppUser::find(2); $user->delete();
Baza de date va afișa o ieșire similară cu următoarea captură de ecran.

Concluzie
Laravel Framework interacționează cu bazele de date folosind SQL brut, generatorul de interogări fluent și ORM elocvent. Un model gestionează datele utilizate de aplicație. O relație elocventă ajută la legarea cu ușurință a tabelelor bazei de date.
Migrarea este o caracteristică specială utilizată pentru a crea un tabel de baze de date. Semănarea este utilizată pentru a insera date de testare în baza de date care este foarte utilă pentru dezvoltator, deoarece dezvoltatorul are nevoie de date pentru a testa aplicația atunci când se dezvoltă. Tinker interacționează cu o bază de date fără a înregistra rute.
Sperăm că vi s-a părut util acest tutorial! În următorul tutorial, vom discuta formulare, încărcarea fișierelor, autentificare, trimiterea de e-mailuri, sesiuni etc.
Învățare fericită!
<< PREV Tutorial | URMĂTOARE Tutorial >>
Lectură recomandată
- Colecția Laravel și Tutorialul Forja Laravel
- Formulare Laravel și reguli de validare cu exemplu
- Sesiune Laravel, încărcare / descărcare fișiere și permisiuni
- Tutorial PHP Laravel pentru începători: Ce este Laravel Framework
- MongoDB Creați o copie de rezervă a bazei de date
- Testarea bazei de date cu JMeter
- Tutorial Oracle Database - Ce este Oracle Database?
- Top 10 instrumente de proiectare a bazelor de date pentru a construi modele de date complexe