laravel database migrations
Ten samouczek wyjaśnia obsługę bazy danych Laravel, migracje, seeding, surowe zapytania SQL, elokwentne modele, elokwentne relacje, rzemieślnik i majsterkowicz:
W poprzednim samouczku Seria samouczków Laravel , dowiedzieliśmy się o architekturze, instalacji i składnikach Laravel Framework. Szczegółowo omówiliśmy strukturę projektu Laravel PHP.
W tym samouczku omówimy bazę danych Laravel, migracje, seeding, uruchamianie surowych zapytań SQL, elokwentne modele, elokwentne relacje, rzemieślnik i majsterkowicz. We wszystkich przykładach wykorzystaliśmy Laravel w wersji 7.
Czego się nauczysz:
Laravel Database Interaction
Laravel Framework współdziała z bazami danych przy użyciu surowy SQL, płynny kreator zapytań, i Elokwentny ORM . Obsługuje następujące cztery bazy danych.
- MySQL w wersji 5.6+
- PostgreSQL (Postgres) w wersji 9.4+
- SQLite w wersji 3.8.8+
- SQL Server w wersji 2017+
Kroki, aby połączyć projekt z bazą danych MySQL:
Krok 1: Stwórz nowy Baza danych o nazwie db_ akademia (możesz użyć dowolnej odpowiedniej nazwy) za pośrednictwem phpMyadmin lub HeidiSQL .
Krok 2: Utwórz nowy projekt o nazwie akademia (możesz użyć dowolnej odpowiedniej nazwy).
Uwaga:Zapoznaj się z naszym poprzednim samouczkiem, Laravel Tutorial for Beginners 1, jeśli nie wiesz, jak zainstalować Laravel i utworzyć nowy projekt.
Krok 3: Otwórz projekt w IDE i otwórz plik .env plik. Zmień wartość DB_DATABASE (nazwa bazy danych) do db_ academy (możesz użyć dowolnej odpowiedniej nazwy). Oboje nazwa bazy danych i wartość DB_DATABASE w .env plik musi być taki sam.
Uwaga : Może zajść potrzeba zmiany innych parametrów bazy danych w pliku .env, takich jak DB_USERNAME, DB_PASSWOD itp., W zależności od konfiguracji bazy danych.
Poniższy zrzut ekranu przedstawia konfigurację bazy danych w pliku .env.
Migracje Laravel
Laravel Migration to specjalna funkcja służąca do tworzenia tabeli bazy danych. Domyślnie xxxx_xx_xx_xxxxxx _create_users_table.php plik i xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php plik jest dołączony.
Struktura migracji Laravel
Klasa Laravel Migration wykorzystuje dwie następujące metody:
- Metoda up (): Ta metoda służy do tworzenia nowej tabeli, kolumny lub indeksu w bazie danych.
- Metoda down (): Ta metoda służy do usuwania istniejącej tabeli, kolumny lub indeksu z bazy danych. Ta metoda jest przeciwieństwem metody up ().
Tworzenie migracji Laravel
Uruchom następujące polecenie w wierszu polecenia, aby utworzyć migrację o nazwie create_tutors_table .
php artisan make:migrationcreate_tutors_table
Wykonanie powyższego polecenia spowoduje utworzenie pliku o nazwie xxxx_xx_xx_xxxxxx_create_tutors_table.php w baza danych / migracje informator.
Otworzyć xxxx_xx_xx_xxxxxx_create_tutors_table.php plik i zmodyfikuj istniejący kod, jak pokazano poniżej.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Uruchamianie migracji Laravel
Uruchom następujące polecenie w wierszu polecenia, aby uruchomić wszystkie dostępne migracje.
php artisan migrate
Powyższe polecenie utworzy odpowiednie tabele w bazie danych, jak pokazano poniżej.
Wycofywanie migracji
# 1) Wycofywanie ostatniej partii migracji
Uruchom następujące polecenie w wierszu polecenia, aby przywrócić plik ostatnia partia migracji (może obejmować migracje pojedyncze lub wielokrotne).
php artisan migrate:rollback
# 2) Wycofywanie migracji wstecznej zapewniające krok
Uruchom następujące polecenie w wierszu polecenia, aby przywrócić plik ostatnie dwie migracje .
php artisan migrate:rollback --step=2
# 3) Wycofywanie wszystkich migracji aplikacji
Uruchom następujące polecenie w wierszu polecenia, aby wycofać wszystkie migracje wniosku.
php artisan migrate:reset
# 4) Wycofywanie i migracja za pomocą jednego polecenia
Uruchom następujące polecenie w wierszu polecenia, aby wycofać i przeprowadzić migrację za pomocą jednego polecenia.
php artisan migrate:refresh
# 5) Wycofywanie i migracja ograniczona nie. migracji
Uruchom następujące polecenie w wierszu polecenia, aby wycofaj i przeprowadź migrację dwóch ostatnich migracji za pomocą jednego polecenia.
php artisan migrate:refresh --step=2
# 6) Porzuć wszystkie tabele i dokonaj migracji
Uruchom następujące polecenie w wierszu polecenia, aby usuń wszystkie tabele i przeprowadź migrację .
php artisan migrate:fresh
Laravel Seeding
Tworząc aplikację, potrzebujesz danych do jej przetestowania. Seeding służy do wstawiania danych testowych do bazy danych.
Tworzenie Seedera
Krok 1: Uruchom następujące polecenie w wierszu polecenia, aby utworzyć siewnik o nazwie UserSeeder .
php artisan make:seederUserSeeder
To polecenie utworzy plik o nazwie UserSeeder.php w baza danych / nasiona informator.
Krok 2: Otworzyć UserSeeder.php plik i zmodyfikuj istniejący kod, jak pokazano poniżej.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
Krok 3: Otworzyć Plik DatabaseSeeder.php w baza danych / nasiona katalogu i zmodyfikuj istniejący kod, jak pokazano poniżej.
call(UserSeeder::class); } }
Uwaga : The DatabaseSeeder class służy do wywoływania innych klas nasion.
Running Seeders
Krok 1: Uruchom następujące polecenie w wierszu polecenia, aby zregeneruj autoloader Composera .
composer dump-autoload
Krok 2: Uruchom następujące polecenie w wierszu polecenia, aby uruchomić plik DatabaseSeeder klasa.
php artisan db:seed
Zamiast uruchamiać powyższe polecenie, możesz uruchomić następujące polecenie w wierszu polecenia, aby uruchomić plik UserSeeder klasa.
php artisan db:seed --class= UserSeeder
Uwaga : Uruchom następujące polecenie w wierszu polecenia, aby usuń wszystkie tabele i ponownie uruchom wszystkie migracje .
php artisan migrate:fresh --seed
Krok 3: Sprawdź wprowadzone dane w bazie danych.
Baza danych wyświetli dane wyjściowe podobne do poniższych:
Uruchamianie surowych zapytań SQL
Uruchamianie zapytania o wstawianie
Krok 1: Dodaj następujący segment kodu w route / web.php plik, aby wstawić nowy rekord do pliku korepetytorzy stół.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
Krok 2: Odwiedź adres URL: http: //academy.test/insert
Krok 3: Sprawdź wprowadzone dane w bazie danych.
Baza danych wyświetli dane wyjściowe podobne do poniższego zrzutu ekranu.
Uruchamianie zapytania wybierającego
Krok 1: Dodaj następujący segment kodu w route / web.php plik do pobrania danych z korepetytorzy tabela, która ma plik ID równa dwa .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
Krok 2: Odwiedź adres URL: http: /academy.test/select
Krok 3: Przeglądarka wyświetli dane wyjściowe podobne do poniższego zrzutu ekranu.
Uruchamianie zapytania aktualizacyjnego
Krok 1: Dodaj następujący segment kodu w route / web.php plik, aby zaktualizować rekord w korepetytorzy tabela, która ma plik ID równa 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
Krok 2: Odwiedź następujący adres URL: http: //academy.test/update
Krok 3: Sprawdź zaktualizowane dane w bazie danych.
Baza danych wyświetli dane wyjściowe podobne do poniższego obrazu:
Uruchamianie zapytania o usunięcie
Krok 1: Dodaj następujący segment kodu w route / web.php plik, aby usunąć rekord w korepetytorzy tabela, która ma plik ID równa 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
Krok 2: Odwiedź adres URL: http: //academy.test/delete
Krok 3: Sprawdź usunięte dane w bazie danych.
Baza danych wyświetli dane wyjściowe podobne do poniższego obrazu:
Laravel Eloquent Models
W architekturze MVC znak M oznacza Model . Model obsługuje dane używane przez aplikację. Wszystkie modele są przechowywane w aplikacja informator. Plik Użytkownik Model ( User.php) jest modelem domyślnym. Każda tabela bazy danych może mieć odpowiedni model Eloquent. Na przykład Tutor model przechowuje dane w plikach korepetytorzy stół.
Uwaga: Nazwa klasy w liczbie mnogiej zostanie użyta jako nazwa tabeli, chyba że określono inaczej.
Tworzenie elokwentnego modelu
Uruchom następujące polecenie w wierszu polecenia, aby utworzyć model o nazwie Korepetytor .
php artisan make:model Tutor
To polecenie utworzy plik o nazwie Tutor.php w aplikacja informator.
Zamiast powyższego polecenia możesz uruchomić następujące polecenie w wierszu polecenia, aby utworzyć plik migracja bazy danych podczas tworzenia modelu.
php artisan make:modelTutor --migration
Lub
php artisan make:modelTutor -m
Oba powyższe polecenia zapewnią ten sam wynik.
Wstaw dane
Krok 1: Dodaj następujący segment kodu w route / web.php plik, aby wstawić nowy rekord do pliku korepetytorzy stół.
jak dostać się do testów Qa
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
Uwaga : Umieść cechę „ użyj aplikacji Tutor ' w route / web.php plik, jak pokazano poniżej.
Krok 2: Odwiedź następujący adres URL: http: //academy.test/insert-data
Krok 3: Sprawdź wprowadzone dane w bazie danych.
Baza danych wyświetli dane wyjściowe podobne do poniższego obrazu:
Znajdź dane
Krok 1: Dodaj następujący segment kodu w route / web.php plik, aby znaleźć / pobrać rekord w korepetytorzy tabela, która ma plik ID równa dwa .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
Krok 2: Odwiedź następujący adres URL: http: //academy.test/find-data
Krok 3: Przeglądarka wyświetli dane wyjściowe podobne do poniższego obrazu:
Uaktualnij dane
Krok 1: Dodaj następujący segment kodu w route / web.php plik, aby zaktualizować rekord w korepetytorzy tabela, która ma plik ID równa dwa .
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
lub
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
Krok 2: Odwiedź następujący adres URL: http: //academy.test/update-data
Krok 3: Sprawdź zaktualizowane dane w bazie danych.
Baza danych wyświetli dane wyjściowe podobne do poniższego obrazu:
Usunąć dane
Krok 1: Dodaj następujący segment kodu w route / web.php plik, aby usunąć rekord w korepetytorzy tabela, która ma plik ID równa dwa .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
Krok 2: Odwiedź następujący adres URL: http: //academy.test/delete-data
Krok 3: Sprawdź usunięte dane w bazie danych.
Baza danych wyświetli dane wyjściowe podobne do poniższego obrazu:
Miękkie usuwanie danych
Zamiast usuwać dane z bazy danych, funkcja miękkiego usuwania ustawia atrybut o nazwie usunięte_at na modelu i wstaw go do tabeli bazy danych.
Użyj następującej cechy, aby włączyć usuwanie nietrwałe.
Illuminate Database Eloquent SoftDeletes
Poniższy segment kodu może służyć do miękkiego usuwania danych.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
Uzyskaj nietrwałe usuwanie danych
Plik withTrashed () można użyć do uzyskać miękkie usuwanie danych jak pokazano niżej.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
Przywróć miękkie usuwanie danych
Plik przywracać() można użyć do przywrócić miękkie usuwanie danych jak pokazano niżej.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
Trwale usuń dane
Plik forceDelete () można użyć do trwale usunąć dane jak pokazano niżej.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Elokwentne relacje Laravela
Wymowna relacja pomaga łatwo łączyć tabele bazy danych.
Wymowne typy relacji
Poniższa lista przedstawia różne typy relacji wymownych:
- Relacja jeden do jednego
- Relacja jeden do wielu
- Relacja wiele do wielu
- Relacja typu jeden przez
- Relacja z wieloma przejściami
- Relacja jeden do jednego (polimorficzna)
- Relacja jeden do wielu (polimorficzna)
- Relacja wiele do wielu (polimorficzna)
# 1) Relacja jeden do jednego
Opis: Jest to relacja jeden do jednego między kolumnami różnych tabel.
Przykład relacji jeden do jednego:
hasOne('AppBook); } }
Przykład relacji jeden do jednego (odwrotna):
belongsTo('App Author); } }
# 2) Relacja jeden do wielu
Opis: W tego typu relacji jeden model posiada dowolną liczbę innych modeli.
Przykład relacji jeden do wielu:
hasMany('AppReview'); } }
Przykład relacji jeden do wielu (odwrotny):
belongsTo('AppTutorial'); } }
# 3) Relacja wiele do wielu
Opis: Jest to bardziej skomplikowana relacja niż relacja jeden do jednego i jeden do wielu. Aby zdefiniować taką relację, musisz utworzyć tabelę przestawną.
Przykład relacji wiele do wielu:
belongsToMany('AppBook); } }
Relacja wiele do wielu (odwrotna) Przykład:
belongsToMany('AppAuthor); } }
# 4) Związek ma charakter indywidualny
Opis: Łączy modele za pomocą pojedynczej relacji pośredniej.
Przykład relacji typu jeden przez:
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Związek ma wiele aspektów
Opis: Umożliwia dostęp do odległych lub pośrednich relacji w łatwy sposób.
Przykład relacji typu has-many-through:
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) Relacja jeden do jednego (polimorficzna)
Opis: Jest podobny do relacji jeden do jednego, ale model docelowy może należeć do więcej niż jednego typu modelu w jednym powiązaniu.
Przykład relacji jeden do jednego (polimorficzna):
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) Relacja jeden do wielu (polimorficzna)
Opis: Jest to podobne do relacji jeden do wielu, ale model docelowy może należeć do więcej niż jednego typu modelu w jednym skojarzeniu.
Przykład relacji jeden do wielu (polimorficzna):
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.Zależność wiele-do-wielu (polimorficzna)
Opis: W tego typu relacji model docelowy ma unikalne rekordy, które mogą być współużytkowane przez inne modele.
Przykład relacji wiele do wielu (polimorficznych):
morphToMany('AppComment, commentable); } }
Laravel Craftsman
Nauczyliśmy się tego w poprzednim samouczku Rzemieślnik jest interfejs linii komend ( CLI ).
Artisan Commands
Uruchom następujące polecenie w wierszu polecenia, aby wyświetlić wszystkie dostępne Polecenia rzemieślnicze .
php artisan
Poniższy zrzut ekranu przedstawia dane wyjściowe powyższego polecenia.
W poniższej tabeli przedstawiono niektóre z ważnych poleceń rzemieślniczych wraz z ich odpowiednimi funkcjami, które pochodzą z danych wyjściowych powyższego polecenia (artisan php).
Komenda funkcjonalność pamięć podręczna: wyczyść Opróżnij pamięć podręczną aplikacji Wsparcie Wyświetla pomoc dotyczącą polecenia lista Wyświetla polecenia migrować Uruchom migracje bazy danych test Uruchom testy aplikacji majstrować Interakcja z aplikacją auth: clear-resets Opróżnij wygasłe tokeny resetowania hasła db: nasiona Wypełnij bazę danych rekordami Lista wydarzeń Wymień zdarzenia i słuchaczy aplikacji klucz: generuj Ustaw klucz aplikacji zrobić: kanał Utwórz nową klasę kanału zrobić: komponent Utwórz nową klasę składnika widoku zrobić: kontroler Utwórz nową klasę kontrolera make: event Utwórz nową klasę wydarzenia zrobić: fabryka Utwórz nową fabrykę modeli make: listener Utwórz nową klasę detektora zdarzeń make: mail Utwórz nową klasę e-maili zrobić: oprogramowanie pośredniczące Utwórz nową klasę oprogramowania pośredniego make: migracja Utwórz nowy plik migracji marka: model Utwórz nową klasę modelu Eloquent zrobić: powiadomienie Utwórz nową klasę powiadomień make: observer Utwórz nową klasę obserwatorów zrobić: polityka Utwórz nową klasę zasad marka: dostawca Utwórz nową klasę dostawcy usług zrobić: zasób Utwórz nowy zasób zrobić: siewnik Utwórz nową klasę siewnika zrobić: test Utwórz nową klasę testową migrate: fresh Usuń wszystkie tabele i ponownie uruchom wszystkie migracje migrate: refresh Zresetuj i uruchom ponownie wszystkie migracje migrate: reset Wycofaj wszystkie migracje baz danych migrate: rollback Wycofaj ostatnią migrację bazy danych powiadomienia: tabela Utwórz migrację dla tabeli powiadomień trasa: lista Lista wszystkich zarejestrowanych tras przechowywanie: link Utwórz dowiązania symboliczne skonfigurowane dla aplikacji
Laravel Tinker
Tinker to REPL (READ-EVAL-PRINT-LOOP), który umożliwia interakcję z aplikacją w wierszu poleceń. Majstrować współdziała z bazą danych bez rejestracji tras.
Tinker używać z Artisan i domyślnie obejmuje.
Włączanie środowiska majsterkowicza
Uruchom następujące polecenie w wierszu polecenia, aby włączyć środowisko Tinker.
php artisan tinker
Poniższy zrzut ekranu przedstawia dane wyjściowe powyższego polecenia.
Wstaw dane za pomocą Tinkera
Uruchom następujące polecenia w wierszu polecenia, aby wstawić nowy rekord do pliku użytkowników stół.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
Baza danych wyświetli dane wyjściowe podobne do poniższego zrzutu ekranu.
Znajdź dane za pomocą Tinkera
Uruchom następujące polecenie w wierszu polecenia, aby znaleźć / pobrać rekord, który ma rozszerzenie ID równy dwa w użytkowników stół.
$user = AppUser::find(2);
Wiersz polecenia wyświetli dane wyjściowe podobne do poniższego zrzutu ekranu.
Zaktualizuj dane za pomocą Tinkera
Uruchom następujące polecenie w wierszu polecenia, aby zaktualizować rekord, który ma rozszerzenie ID równy dwa w użytkowników stół.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
Baza danych wyświetli dane wyjściowe podobne do poniższego zrzutu ekranu.
wolne oprogramowanie wejścia i wyjścia
Usuń dane za pomocą Tinkera
Uruchom następujące polecenie w wierszu polecenia, aby usunąć rekord, który ma rozszerzenie ID równy dwa w użytkowników stół.
$user = AppUser::find(2); $user->delete();
Baza danych wyświetli dane wyjściowe podobne do poniższego zrzutu ekranu.
Wniosek
Laravel Framework współdziała z bazami danych przy użyciu surowego języka SQL, narzędzia do tworzenia płynnych zapytań i elokwentnego ORM. Model obsługuje dane używane przez aplikację. Wymowna relacja pomaga łatwo łączyć tabele bazy danych.
Migracja to specjalna funkcja używana do tworzenia tabeli bazy danych. Seeding służy do wstawiania danych testowych do bazy danych, co jest bardzo pomocne dla programisty, ponieważ potrzebuje danych do przetestowania aplikacji podczas tworzenia. Tinker współdziała z bazą danych bez rejestracji tras.
Mamy nadzieję, że ten samouczek okazał się pomocny! W następnym samouczku omówimy formularze, przesyłanie plików, uwierzytelnianie, wysyłanie e-maili, sesje itp.
Miłej nauki!
<< PREV Tutorial | NASTĘPNY samouczek >>
rekomendowane lektury
- Kolekcja Laravel i samouczek Laravel Forge
- Formularze Laravel i zasady walidacji z przykładem
- Sesja Laravel, przesyłanie / pobieranie plików i uprawnienia
- Samouczek PHP Laravel dla początkujących: Co to jest Laravel Framework
- MongoDB Utwórz kopię zapasową bazy danych
- Testowanie bazy danych za pomocą narzędzia JMeter
- Samouczek dotyczący bazy danych Oracle - co to jest baza danych Oracle?
- 10 najlepszych narzędzi do projektowania baz danych do tworzenia złożonych modeli danych