laravel database migrations
Denna handledning förklarar Laravel-databashantering, Migrations, Seeding, Raw SQL-frågor, Eloquent Modeller, Eloquent Relationships, Artisan och Tinker:
I föregående handledning av Laravel handledningsserie , vi lärde oss om arkitekturen, installationen och komponenterna i Laravel Framework. Vi har sett Laravel PHP-projektstrukturen i detalj.
I denna handledning kommer vi att täcka Laravel Database, Migrations, Seeding, Running Raw SQL Queries, Eloquent Models, Eloquent Relationships, Artisan och Tinker. Vi har använt Laravel version 7 i alla exemplen.
Vad du kommer att lära dig:
Laravel Database Interaction
Laravel Framework interagerar med databaser med hjälp av rå SQL, den flytande frågebyggaren, och den Välgörande ORM . Den stöder följande fyra databaser.
- MySQL-version 5.6+
- PostgreSQL (Postgres) version 9.4+
- SQLite version 3.8.8+
- SQL Server-version 2017+
Steg för att ansluta ditt projekt till MySQL-databas:
Steg 1: Skapa en ny databas som heter db_ akademi (du kan använda valfritt namn) via phpMyadmin eller HeidiSQL .
Steg 2: Skapa ett nytt projekt med namnet akademi (du kan använda valfritt namn).
Notera:Se vår tidigare handledning, Laravel Tutorial för nybörjare 1, om du inte vet hur du installerar Laravel och skapar ett nytt projekt.
Steg 3: Öppna projektet i en IDE och öppna .env fil. Ändra värdet på DB_DATABAS (databasnamn) till db_ akademi (du kan använda valfritt namn). Både Databas namn och värdet på DB_DATABAS i .env filen måste vara densamma.
Notera : Du kan behöva ändra andra databasparametrar i .env-filen som DB_USERNAME, DB_PASSWOD, etc beroende på din databaskonfiguration.
Följande skärmdump visar databaskonfigurationen i .env-filen.
Laravel Migrations
Laravel Migration är en speciell funktion som används för att skapa en databastabell. Som standard är xxxx_xx_xx_xxxxxx _create_users_table.php filen och xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php filen ingår.
Strukturen för en Laravel Migration
Laravel Migration-klass använder följande två metoder:
- Upp () -metoden: Denna metod används för att skapa en ny tabell, kolumn eller index i databasen.
- Metoden down (): Den här metoden används för att släppa en befintlig tabell, kolumn eller index i databasen. Denna metod är den motsatta metoden för upp () -metoden.
Skapa en Laravel-migration
Kör följande kommando i kommandotolken för att skapa en migrering som kallas create_tutors_table .
php artisan make:migrationcreate_tutors_table
Genomförandet av kommandot ovan skapar en fil med namnet xxxx_xx_xx_xxxxxx_create_tutors_table.php i databas / migreringar katalog.
Öppna xxxx_xx_xx_xxxxxx_create_tutors_table.php filen och ändra den befintliga koden enligt nedan.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Köra Laravel Migrations
Kör följande kommando i kommandotolken för att köra alla tillgängliga migreringar.
php artisan migrate
Ovanstående kommando skapar relevanta tabeller i databasen enligt nedan.
Rolling Back Migrations
# 1) Rulla tillbaka den sista gruppen Migrations
Kör följande kommando i kommandotolken för att rulla tillbaka senaste omgången av migreringar (det kan inkludera enstaka eller flera migreringar).
php artisan migrate:rollback
# 2) Rolling Back Migrations som ger steget
Kör följande kommando i kommandotolken för att rulla tillbaka de två senaste migreringarna .
php artisan migrate:rollback --step=2
# 3) Rulla tillbaka alla migrationer i applikationen
Kör följande kommando i kommandotolken till rulla tillbaka alla migreringar av ansökan.
php artisan migrate:reset
# 4) Rulla tillbaka och migrera med ett enda kommando
Kör följande kommando i kommandotolken till rulla tillbaka och migrera med ett enda kommando.
php artisan migrate:refresh
# 5) Rolling Back och Migrate begränsat nr. av migrationer
Kör följande kommando i kommandotolken till rulla tillbaka och migrera de två senaste migreringarna med ett enda kommando.
php artisan migrate:refresh --step=2
# 6) Släpp alla tabeller och migrera
Kör följande kommando i kommandotolken till släpp alla tabeller och migrera .
php artisan migrate:fresh
Laravel sådd
När du utvecklar en applikation behöver du data för att testa applikationen. Seeding används för att infoga testdata i databasen.
Skapa en såmaskin
Steg 1: Kör följande kommando i kommandotolken för att skapa en sådd som kallas UserSeeder .
php artisan make:seederUserSeeder
Detta kommando skapar en fil med namnet UserSeeder.php i databas / frön katalog.
Steg 2: Öppna UserSeeder.php filen och ändra den befintliga koden enligt nedan.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
Steg 3: Öppna DatabaseSeeder.php-fil i databas / frön katalogen och ändra den befintliga koden enligt nedan.
call(UserSeeder::class); } }
Notera : DatabaseSeeder klass används för att anropa andra fröklasser.
Running Seeders
Steg 1: Kör följande kommando i kommandotolken till återskapa Composer's autoloader .
composer dump-autoload
Steg 2: Kör följande kommando i kommandotolken för att köra DatabaseSeeder klass.
php artisan db:seed
Istället för att köra ovanstående kommando kan du köra följande kommando i kommandotolken för att köra UserSeeder klass.
php artisan db:seed --class= UserSeeder
Notera : Kör följande kommando i kommandotolken till släpp alla tabeller och kör igen alla migreringar .
php artisan migrate:fresh --seed
Steg 3: Verifiera de infogade uppgifterna med databasen.
Databasen visar utdata liknande nedan:
Köra Raw SQL-frågor
Köra en infoga fråga
Steg 1: Lägg till följande kodsegment i rutter / web.php fil för att infoga en ny post till handledare tabell.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
Steg 2: Besök URL: http: //academy.test/insert
Steg 3: Verifiera de infogade uppgifterna med databasen.
Databasen visar utdata som liknar följande skärmdump.
Köra en Välj fråga
Steg 1: Lägg till följande kodsegment i rutter / web.php fil för att hämta data från handledare bord som har en id är lika med två .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
Steg 2: Besök URL: http: /academy.test/select
Steg 3: Webbläsaren visar utdata som liknar följande skärmdump.
Köra en uppdateringsfråga
Steg 1: Lägg till följande kodsegment i rutter / web.php fil för att uppdatera posten i handledare bord som har en id är lika med 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
Steg 2: Besök följande URL: http: //academy.test/update
Steg 3: Verifiera de uppdaterade uppgifterna med databasen.
Databasen visar utdata som liknar bilden nedan:
Köra en Radera fråga
Steg 1: Lägg till följande kodsegment i rutter / web.php fil för att radera posten i handledare bord som har en id är lika med 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
Steg 2: Besök URL: http: //academy.test/delete
Steg 3: Verifiera raderade data med databasen.
Databasen visar utdata som liknar bilden nedan:
Laravel Eloquent Modeller
I MVC-arkitektur, karaktären M står för Modell . En modell hanterar de data som används av applikationen. Alla modeller lagras i app katalog. De Användare modell ( User.php) är standardmodellen. Varje tabell i databasen kan ha en motsvarande Eloquent-modell. Till exempel handledare modellen lagrar data i handledare tabell.
Notera: Flertalsnamnet på klassen kommer att användas som tabellnamn om inte annat anges.
Skapa en vältalig modell
Kör följande kommando i kommandotolken för att skapa en modell med namnet Handledare .
php artisan make:model Tutor
Detta kommando skapar en fil med namnet Tutor.php i app katalog.
I stället för ovanstående kommando kan du köra följande kommando i kommandotolken för att skapa en databasmigrering när du skapar modellen.
php artisan make:modelTutor --migration
Eller
php artisan make:modelTutor -m
Båda ovanstående kommandon ger samma utdata.
Infoga data
Steg 1: Lägg till följande kodsegment i rutter / web.php fil för att infoga en ny post till handledare tabell.
vad är en länkad lista c ++
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
Notera : Sätt egenskapen “ använd App Tutor ”I rutter / web.php fil som visas nedan.
Steg 2: Besök följande URL: http: //academy.test/insert-data
Steg 3: Verifiera de infogade uppgifterna med databasen.
Databasen visar utdata som liknar bilden nedan:
Hitta data
Steg 1: Lägg till följande kodsegment i rutter / web.php fil för att hitta / hämta posten i handledare bord som har en id är lika med två .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
Steg 2: Besök följande URL: http: //academy.test/find-data
Steg 3: Webbläsaren visar utdata som liknar bilden nedan:
Uppdatera data
Steg 1: Lägg till följande kodsegment i rutter / web.php fil för att uppdatera posten i handledare bord som har en id är lika med två .
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')); });
Steg 2: Besök följande URL: http: //academy.test/update-data
Steg 3: Verifiera de uppdaterade uppgifterna med databasen.
Databasen visar utdata som liknar bilden nedan:
Ta bort data
Steg 1: Lägg till följande kodsegment i rutter / web.php fil för att radera posten i handledare bord som har en id är lika med två .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
Steg 2: Besök följande URL: http: //academy.test/delete-data
Steg 3: Verifiera raderade data med databasen.
Databasen visar utdata som liknar bilden nedan:
Mjuk radera data
Istället för att radera data från databasen, anger mjuk borttagning ett attribut som kallas borttagen_på på modellen och infoga den i databastabellen.
Använd följande egenskaper för att aktivera mjuk radering.
hur man öppnar bin-filer på Windows 8
Illuminate Database Eloquent SoftDeletes
Följande kodsegment kan användas för att mjukt radera data.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
Få mjuk radera data
De withTrashed () metod kan användas för att få mjuk radera data enligt nedanstående.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
Återställ mjuk radera data
De Återställ() metod kan användas för att återställa mjuk radera data enligt nedanstående.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
Ta bort data permanent
De forceDelete () metod kan användas för att radera data permanent enligt nedanstående.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Laravel Eloquent Relationships
Ett vältaligt förhållande hjälper till att enkelt länka databastabeller.
Välsmakande relationstyper
Följande lista visar de olika typerna av vältaliga relationer:
- En-till-en-relation
- En-till-många-relation
- Många till många förhållanden
- Har en-genom-relation
- Har många-genom-förhållande
- En-mot-en (polymorf) relation
- En-till-många (polymorf) relation
- Många till många (polymorfa) förhållanden
# 1) En-till-en-relation
Beskrivning: Det är förhållandet mellan olika kolumner i olika tabeller.
Exempel på en-till-en-relation:
hasOne('AppBook); } }
Exempel på en-till-en-relation (invers):
belongsTo('App Author); } }
# 2) En-till-många-relation
Beskrivning: I denna typ av relation äger en modell valfritt antal andra modeller.
Exempel på en-till-många-förhållanden:
hasMany('AppReview'); } }
Exempel på en-till-många-relation (invers):
belongsTo('AppTutorial'); } }
# 3) Mång-till-många-förhållande
Beskrivning: Det är en mer komplicerad relation än en-till-en & en-till-många-relationer, och du måste skapa en pivottabell för att definiera en sådan relation.
Mång-till-många förhållande exempel:
belongsToMany('AppBook); } }
Mång-till-många (inversa) förhållande Exempel:
belongsToMany('AppAuthor); } }
# 4) Har ett en-genom-förhållande
Beskrivning: Den ansluter modeller genom en enda mellanliggande relation.
Har ett exempel på förhållande:
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Har-många-genom-förhållande
Beskrivning: Det ger tillgång till avlägsna eller mellanliggande relationer på en enkel metod.
Har många-genom-förhållande exempel:
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) En-mot-en (polymorf) relation
Beskrivning: Det liknar en en-till-en-relation, men målmodellen kan tillhöra mer än en modelltyp på en enda association.
Exempel på en-till-en (polymorf) relation:
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-till-många (polymorf) relation
Beskrivning: Det liknar en en-till-många-relation men målmodellen kan tillhöra mer än en modelltyp på en enda association.
Exempel på en-till-många (polymorfa) förhållanden:
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) Många till många (polymorfa) förhållanden
Beskrivning: I denna typ av relation har målmodellen unika poster som kan delas mellan de andra modellerna.
Mång-till-många (polymorfa) förhållande exempel:
morphToMany('AppComment, commentable); } }
Laravel Craftsman
I föregående handledning har vi lärt oss det Hantverkare är en kommandoradsgränssnitt ( CLI ).
Hantverkare
Kör följande kommando i kommandotolken för att visa alla tillgängliga Hantverkare kommandon .
php artisan
Följande skärmdump visar utdata från ovanstående kommando.
Följande tabell visar några av de viktiga hantverkarkommandona med deras respektive funktioner, som hämtas från utdata från ovanstående kommando (php artisan).
Kommando funktionalitet cache: rensa Spola applikationscachen hjälp Visar hjälp för ett kommando lista Listar kommandon flytta Kör databasmigreringarna testa Kör applikationstesterna knåpa Interagera med din ansökan auth: clear-resets Spola lösenordsåterställningstider som löpt ut db: utsäde Seed databasen med poster händelse: lista Lista applikationens händelser och lyssnare nyckel: generera Ställ in programnyckeln make: kanal Skapa en ny kanalklass make: komponent Skapa en ny vyskomponentklass make: controller Skapa en ny kontrollerklass make: händelse Skapa en ny evenemangsklass fabrikat: fabrik Skapa en ny modellfabrik göra: lyssnare Skapa en ny lyssnarklass för evenemang göra: post Skapa en ny e-postklass make: mellanvara Skapa en ny medelvaruklass göra: migration Skapa en ny migreringsfil gör modell Skapa en ny Eloquent-modellklass göra: anmälan Skapa en ny anmälningsklass göra: observatör Skapa en ny observatörsklass göra: policy Skapa en ny policyklass make: leverantör Skapa en ny tjänsteleverantörsklass göra: resurs Skapa en ny resurs göra: såmaskin Skapa en ny såmasklass göra: testa Skapa en ny testklass migrera: färskt Släpp alla tabeller och kör alla migreringar igen migrera: uppdatera Återställ och kör igen alla migreringar migrera: återställ Återställ alla databasmigreringar migrera: återställning Återställ den senaste databasmigrationen meddelanden: tabell Skapa en migrering för aviseringstabellen rutt: lista Lista alla registrerade rutter lagring: länk Skapa de symboliska länkarna som konfigurerats för applikationen
Laravel Tinker
Tinker är en REPL (READ-EVAL-PRINT-LOOP) som låter dig interagera med applikationen på kommandoraden. Knåpa interagerar med en databas utan att registrera rutter.
Tinker används med Artisan, och det ingår som standard.
Aktiverar Tinker-miljö
Kör följande kommando i kommandotolken för att aktivera Tinker-miljön.
php artisan tinker
Följande skärmdump visar utdata från ovanstående kommando.
Infoga data med Tinker
Kör följande kommandon i kommandotolken för att infoga en ny post till användare tabell.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
Databasen visar utdata som liknar följande skärmdump.
Hitta data med Tinker
Kör följande kommando i kommandotolken för att hitta / hämta posten som har en id lika med två i användare tabell.
$user = AppUser::find(2);
Kommandotolken visar utdata som liknar följande skärmdump.
Uppdatera data med Tinker
Kör följande kommando i kommandotolken för att uppdatera posten som har en id lika med två i användare tabell.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
Databasen visar utdata som liknar följande skärmdump.
Ta bort data med Tinker
Kör följande kommando i kommandotolken för att radera posten som har en id lika med två i användare tabell.
$user = AppUser::find(2); $user->delete();
Databasen visar utdata som liknar följande skärmdump.
Slutsats
Laravel Framework interagerar med databaserna med rå SQL, den flytande frågebyggaren och den vältaliga ORM. En modell hanterar de data som används av applikationen. Ett vältaligt förhållande hjälper till att enkelt länka databastabeller.
Migration är en speciell funktion som används för att skapa en databastabell. Seeding används för att infoga testdata i databasen som är till stor hjälp för utvecklaren eftersom utvecklaren behöver data för att testa applikationen när den utvecklas. Tinker interagerar med en databas utan att registrera rutter.
Vi hoppas att du tyckte att den här handledningen var till hjälp! I nästa handledning diskuterar vi formulär, uppladdning av filer, autentisering, skicka e-post, sessioner etc.
Lyckligt lärande!
<< PREV Tutorial | NÄSTA självstudie >>
Rekommenderad läsning
- Laravel Collection And Laravel Forge Tutorial
- Laravel formulär och valideringsregler med exempel
- Laravelsession, filöverföring / nedladdning och behörigheter
- PHP Laravel Handledning för nybörjare: Vad är Laravel Framework
- MongoDB Skapa säkerhetskopia av databas
- Databastestning med JMeter
- Oracle Database Tutorial - Vad är Oracle Database?
- Topp 10 databasdesignverktyg för att bygga komplexa datamodeller