laravel database migrations
Denne vejledning forklarer håndtering af Laravel-databaser, migreringer, såning, rå SQL-forespørgsler, veltalende modeller, veltalende forhold, håndværker og tinker:
I den foregående tutorial af Laravel Tutorial Series , lærte vi om arkitekturen, installationen og komponenterne i Laravel Framework. Vi har set Laravel PHP-projektstrukturen i detaljer.
I denne vejledning vil vi dække Laravel Database, Migrations, Seeding, Running Raw SQL Queries, Eloquent Models, Eloquent Relationships, Artisan og Tinker. Vi har brugt Laravel version 7 i alle eksemplerne.
Hvad du lærer:
Laravel-databaseinteraktion
Laravel Framework interagerer med databaser ved hjælp af rå SQL, den flydende forespørgselbygger, og Veltalende ORM . Den understøtter følgende fire databaser.
- MySQL version 5.6+
- PostgreSQL (Postgres) version 9.4+
- SQLite version 3.8.8+
- SQL Server-version 2017+
Trin til at forbinde dit projekt til MySQL-database:
Trin 1: Opret en ny database som hedder db_ akademi (du kan bruge ethvert passende navn) via phpMyadmin eller HeidiSQL .
Trin # 2: Opret et nyt projekt med navnet akademi (du kan bruge ethvert passende navn).
Bemærk:Se vores tidligere tutorial, Laravel Tutorial for Beginners 1, hvis du ikke ved, hvordan du installerer Laravel og opretter et nyt projekt.
Trin # 3: Åbn projektet i en IDE, og åbn .env fil. Skift værdien af DB_DATABASE (database navn) til db_ akademi (du kan bruge ethvert passende navn). Både database navn og værdien af DB_DATABASE i .env filen skal være den samme.
Bemærk : Du skal muligvis ændre andre databaseparametre i .env-filen, såsom DB_USERNAME, DB_PASSWOD osv. Afhængigt af din databasekonfiguration.
Følgende skærmbillede viser databasekonfigurationen i .env-filen.
Laravel Migrations
Laravel Migration er en speciel funktion, der bruges til at oprette en databasetabel. Som standard er xxxx_xx_xx_xxxxxx _create_users_table.php filen og xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php fil er inkluderet.
Struktur af en Laravel Migration
Laravel Migration klasse bruger følgende to metoder:
- Metoden op (): Denne metode bruges til at oprette en ny tabel, kolonne eller indeks i databasen.
- Down () -metoden: Denne metode bruges til at droppe en eksisterende tabel, kolonne eller et indeks i databasen. Denne metode er den modsatte metode til metoden op ().
Oprettelse af en Laravel-migration
Kør følgende kommando i kommandoprompten for at oprette en kaldet migration create_tutors_table .
php artisan make:migrationcreate_tutors_table
Udførelsen af ovenstående kommando opretter en fil med navnet xxxx_xx_xx_xxxxxx_create_tutors_table.php i database / migreringer vejviser.
Åbn xxxx_xx_xx_xxxxxx_create_tutors_table.php fil og rediger den eksisterende kode som vist nedenfor.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Kører Laravel Migrations
Kør følgende kommando i kommandoprompten for at køre alle tilgængelige migreringer.
php artisan migrate
Ovenstående kommando opretter de relevante tabeller i databasen som vist nedenfor.
Tilbagevendende migrationer
# 1) Tilbagevenden til det sidste parti Migrations
Kør følgende kommando i kommandoprompten for at rulle tilbage sidste parti migreringer (det kan omfatte enkelt eller flere migreringer).
php artisan migrate:rollback
# 2) Tilbagevendende migrationer, der giver trinnet
Kør følgende kommando i kommandoprompten for at rulle tilbage sidste to migrationer .
php artisan migrate:rollback --step=2
# 3) Tilbagevenden til alle migrationer af applikationen
Kør følgende kommando i kommandoprompten til rul alle migreringer tilbage af ansøgningen.
php artisan migrate:reset
# 4) Rul tilbage og migrer ved hjælp af en enkelt kommando
Kør følgende kommando i kommandoprompten til rul tilbage og migrere ved hjælp af en enkelt kommando.
php artisan migrate:refresh
# 5) Rul tilbage og migrere begrænset nr. af migrationer
Kør følgende kommando i kommandoprompten til rul tilbage og migrer de to sidste migreringer ved hjælp af en enkelt kommando.
php artisan migrate:refresh --step=2
# 6) Slip alle tabeller, og migrér
Kør følgende kommando i kommandoprompten til slip alle tabeller og migrere .
php artisan migrate:fresh
Laravel såning
Når du udvikler en applikation, har du brug for data for at teste applikationen. Såning bruges til at indsætte testdata i databasen.
Oprettelse af en såmaskine
Trin 1: Kør følgende kommando i kommandoprompten for at oprette en såmaskine, der kaldes UserSeeder .
php artisan make:seederUserSeeder
Denne kommando opretter en fil med navnet UserSeeder.php i database / frø vejviser.
Trin 2: Åbn UserSeeder.php fil og rediger den eksisterende kode som vist nedenfor.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
Trin 3: Åbn DatabaseSeeder.php-fil i database / frø mappe og ændre den eksisterende kode som vist nedenfor.
call(UserSeeder::class); } }
Bemærk : Det DatabaseSeeder klasse bruges til at kalde andre frøklasser.
Running Seeders
Trin 1: Kør følgende kommando i kommandoprompten til regenerere komponistens autolader .
composer dump-autoload
Trin 2: Kør følgende kommando i kommandoprompten for at køre DatabaseSeeder klasse.
php artisan db:seed
I stedet for at køre ovenstående kommando kan du køre følgende kommando i kommandoprompten for at køre UserSeeder klasse.
php artisan db:seed --class= UserSeeder
Bemærk : Kør følgende kommando i kommandoprompten til slip alle tabeller og kør alle migreringer igen .
php artisan migrate:fresh --seed
Trin 3: Bekræft de indsatte data med databasen.
Databasen viser output svarende til nedenstående:
Kørsel af rå SQL-forespørgsler
Kørsel af en indsætningsforespørgsel
Trin 1: Tilføj følgende kodesegment i ruter / web.php fil for at indsætte en ny post til vejledere bord.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
Trin 2: Besøg URL: http: //academy.test/insert
Trin 3: Bekræft de indsatte data med databasen.
Databasen viser output svarende til følgende skærmbillede.
Kørsel af en valgt forespørgsel
Trin 1: Tilføj følgende kodesegment i ruter / web.php fil for at hente data fra vejledere tabel, der har en id svarer til to .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
Trin 2: Besøg URL: http: /academy.test/select
Trin 3: Browseren viser output svarende til følgende skærmbillede.
Kører en opdateringsforespørgsel
Trin 1: Tilføj følgende kodesegment i ruter / web.php fil for at opdatere posten i vejledere tabel, der har en id svarer til 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
Trin 2: Besøg følgende URL: http: //academy.test/update
Trin 3: Bekræft de opdaterede data med databasen.
Databasen viser output svarende til nedenstående billede:
Kørsel af en Slet forespørgsel
Trin 1: Tilføj følgende kodesegment i ruter / web.php fil for at slette posten i vejledere tabel, der har en id svarer til 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
Trin 2: Besøg URL: http: //academy.test/delete
Trin 3: Bekræft de slettede data med databasen.
Databasen viser output svarende til nedenstående billede:
Laravel veltalende modeller
I MVC-arkitektur er karakteren M står for Model . En model håndterer de data, der bruges af applikationen. Alle modeller er gemt i app vejviser. Det Bruger model ( User.php) er standardmodellen. Hver tabel i databasen kan have en tilsvarende Eloquent-model. For eksempel vejleder model gemmer data i vejledere bord.
Bemærk: Flertalsnavnet på klassen vil blive brugt som tabelnavnet, medmindre andet er angivet.
Oprettelse af en veltalende model
Kør følgende kommando i kommandoprompten for at oprette en model med navnet Vejviser .
php artisan make:model Tutor
Denne kommando opretter en fil med navnet Tutor.php i app vejviser.
I stedet for ovenstående kommando kan du køre følgende kommando i kommandoprompten for at oprette en database migration når du opretter modellen.
php artisan make:modelTutor --migration
Eller
php artisan make:modelTutor -m
Begge ovenstående kommandoer giver den samme output.
Indsæt data
Trin 1: Tilføj følgende kodesegment i ruter / web.php fil for at indsætte en ny post til vejledere bord.
funktionel test og ikke funktionel test
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
Bemærk : Sæt træk “ brug App Tutor ”I ruter / web.php filen som vist nedenfor.
Trin 2: Besøg følgende URL: http: //academy.test/insert-data
Trin 3: Bekræft de indsatte data med databasen.
Databasen viser output svarende til nedenstående billede:
Find data
Trin 1: Tilføj følgende kodesegment i ruter / web.php fil for at finde / hente posten i vejledere tabel, der har en id svarer til to .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
Trin 2: Besøg følgende URL: http: //academy.test/find-data
Trin 3: Browseren viser output svarende til nedenstående billede:
Opdater data
Trin 1: Tilføj følgende kodesegment i ruter / web.php fil for at opdatere posten i vejledere tabel, der har en id svarer til to .
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
eller
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
Trin 2: Besøg følgende URL: http: //academy.test/update-data
Trin 3: Bekræft de opdaterede data med databasen.
Databasen viser output svarende til nedenstående billede:
Slet data
Trin 1: Tilføj følgende kodesegment i ruter / web.php fil for at slette posten i vejledere tabel, der har en id svarer til to .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
Trin 2: Besøg følgende URL: http: //academy.test/delete-data
Trin 3: Bekræft de slettede data med databasen.
Databasen viser output svarende til nedenstående billede:
Blød slet data
I stedet for at slette data fra databasen indstiller soft delete en attribut kaldet slettet_at på modellen og indsæt den i databasetabellen.
Brug følgende egenskab for at aktivere soft delete.
Illuminate Database Eloquent SoftDeletes
Følgende kodesegment kan bruges til blød sletning af data.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
Få bløde sletningsdata
Det withTrashed () metode kan bruges til få bløde slette data som vist nedenfor.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
Gendan bløde sletningsdata
Det gendanne () metode kan bruges til gendanne bløde sletningsdata som vist nedenfor.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
Slet data permanent
Det forceDelete () metode kan bruges til slet data permanent som vist nedenfor.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Laravel veltalende forhold
Et veltalende forhold hjælper med at linke databasetabeller let.
Veltalende forholdstyper
Følgende liste viser de forskellige typer veltalende forhold:
- Et-til-et forhold
- Et-til-mange forhold
- Mange-til-mange forhold
- Har-en-gennem-forhold
- Har mange-igennem forhold
- En-til-en (polymorf) forhold
- En-til-mange (polymorfe) forhold
- Mange-til-mange (polymorfe) forhold
# 1) Et-til-en-forhold
Beskrivelse: Det er det ene-til-et forhold mellem kolonnerne i forskellige tabeller.
Eksempel på en-til-et forhold:
hasOne('AppBook); } }
Eksempel på en-til-en-relation (omvendt):
belongsTo('App Author); } }
# 2) Et-til-mange-forhold
Beskrivelse: I denne type forhold ejer en model et vilkårligt antal andre modeller.
Eksempel på en-til-mange forhold:
hasMany('AppReview'); } }
Eksempel på en-til-mange forhold (omvendt):
belongsTo('AppTutorial'); } }
# 3) Forhold mellem mange og mange
Beskrivelse: Det er et mere kompliceret forhold end en-til-en & en-til-mange forhold, og du skal oprette en pivottabel for at definere et sådant forhold.
Eksempel på mange-til-mange forhold:
belongsToMany('AppBook); } }
Mange-til-mange (omvendt) forhold Eksempel:
belongsToMany('AppAuthor); } }
# 4) Har et en-gennem-forhold
Beskrivelse: Det forbinder modeller gennem et enkelt mellemliggende forhold.
Eksempel på forhold mellem en og en:
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Har-mange-gennem-forhold
Beskrivelse: Det giver adgang til fjerne eller mellemliggende forhold på en nem metode.
Har mange eksempler på forholdseksempel:
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) En-til-en (polymorf) forhold
Beskrivelse: Det svarer til et en-til-et forhold, men målmodellen kan tilhøre mere end en modelltype på en enkelt forening.
Én-til-en (polymorf) forholdseksempel:
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) En-til-mange (polymorf) forhold
Beskrivelse: Det ligner et en-til-mange forhold, men målmodellen kan tilhøre mere end en modelltype på en enkelt forening.
Eksempel på en-til-mange (polymorfe) forhold:
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) Mange-til-mange (polymorfe) forhold
Beskrivelse: I denne type forhold har målmodellen unikke poster, der kan deles mellem de andre modeller.
Eksempel på mange-til-mange (polymorfe) forhold:
morphToMany('AppComment, commentable); } }
Laravel håndværker
I den foregående tutorial har vi lært det Håndværker er en kommandolinjegrænseflade ( CLI ).
Håndværkerkommandoer
Kør følgende kommando i kommandoprompten for at se alle tilgængelige Håndværker kommandoer .
php artisan
Følgende skærmbillede viser output fra ovenstående kommando.
Følgende tabel viser nogle af de vigtige håndværkskommandoer med deres respektive funktioner, som er taget fra output fra ovenstående kommando (php artisan).
Kommando funktionalitet cache: ryd Skyl applikationens cache Hjælp Viser hjælp til en kommando liste Viser kommandoer migrere Kør databasemigreringerne prøve Kør applikationstestene tinker Interagere med din ansøgning auth: clear-resets Skyl de udløbne adgangskoder til nulstilling af adgangskode db: frø Frø databasen med optegnelser begivenhed: liste Angiv programmets begivenheder og lyttere nøgle: generer Indstil applikationsnøglen make: kanal Opret en ny kanalklasse fabrikat: komponent Opret en ny visningskomponentklasse fabrikat: controller Opret en ny controller-klasse make: begivenhed Opret en ny begivenhedsklasse fabrikat: fabrik Opret en ny modelfabrik gøre: lytter Opret en ny begivenhedslytterklasse lav: mail Opret en ny e-mail-klasse make: mellemvare Opret en ny middleware-klasse gøre: migration Opret en ny migreringsfil fabrikat: model Opret en ny veltalende modelklasse make: anmeldelse Opret en ny underretningsklasse gøre: observatør Opret en ny observatørklasse gøre: politik Opret en ny politikklasse make: udbyder Opret en ny tjenesteudbyderklasse gøre: ressource Opret en ny ressource fabrikat: såmaskine Opret en ny såmandsklasse lav: test Opret en ny testklasse migrere: frisk Slip alle tabeller, og kør alle migreringer igen migrere: opdater Nulstil og kør alle migreringer igen migrere: nulstil Tilbagefør alle databasemigreringer migrere: tilbageførsel Tilbagefør den sidste migrering af databasen meddelelser: tabel Opret en migration til meddelelsestabellen rute: liste Liste over alle registrerede ruter opbevaring: link Opret de symbolske links, der er konfigureret til applikationen
Laravel Tinker
Tinker er en REPL (READ-EVAL-PRINT-LOOP), der giver dig mulighed for at interagere med applikationen på kommandolinjen. Tinker interagerer med en database uden at registrere ruter.
Tinker brug med Artisan, og det inkluderer som standard.
Aktivering af Tinker-miljø
Kør følgende kommando i kommandoprompten for at aktivere Tinker-miljøet.
php artisan tinker
Følgende skærmbillede viser output fra ovenstående kommando.
Indsæt data med Tinker
hvad er den bedste tekst til tale software
Kør følgende kommandoer i kommandoprompten for at indsætte en ny post til brugere bord.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
Databasen viser output svarende til følgende skærmbillede.
Find data med Tinker
Kør følgende kommando i kommandoprompten for at finde / hente den post, der har en id svarende til to i brugere bord.
$user = AppUser::find(2);
Kommandoprompten viser output svarende til følgende skærmbillede.
Opdater data med Tinker
Kør følgende kommando i kommandoprompten for at opdatere den post, der har en id svarende til to i brugere bord.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
Databasen viser output svarende til følgende skærmbillede.
Slet data med Tinker
Kør følgende kommando i kommandoprompten for at slette den post, der har en id svarende til to i brugere bord.
$user = AppUser::find(2); $user->delete();
Databasen viser output svarende til følgende skærmbillede.
Konklusion
Laravel Framework interagerer med databaser ved hjælp af rå SQL, den flydende forespørgselbygger og den veltalende ORM. En model håndterer de data, der bruges af applikationen. Et veltalende forhold hjælper med at linke databasetabeller let.
Migration er en speciel funktion, der bruges til at oprette en databasetabel. Såning bruges til at indsætte testdata i databasen, som er meget nyttigt for udvikleren, da udvikleren har brug for data for at teste applikationen, når han udvikler. Tinker interagerer med en database uden at registrere ruter.
Vi håber, du fandt denne tutorial nyttig! I den næste vejledning diskuterer vi formularer, filupload, godkendelse, afsendelse af e-mails, sessioner osv.
Glad læring!
<< PREV Tutorial | NÆSTE vejledning >>
Anbefalet læsning
- Laravel Collection And Laravel Forge Tutorial
- Laravel-formularer og valideringsregler med eksempel
- Laravelsession, filupload / download og tilladelser
- PHP Laravel Tutorial for begyndere: Hvad er Laravel Framework
- MongoDB Opret sikkerhedskopi af database
- Databasetestning med JMeter
- Oracle Database Tutorial - Hvad er Oracle Database?
- Top 10 databasedesignværktøjer til opbygning af komplekse datamodeller