Modele w Laravel
W środowisku Laravel każda tabela bazy danych może mieć odpowiedni "Model", służący do interakcji z tą tabelą za pomocą metod klasy. Modele umożliwiają wykonywanie zapytań SQL na odpowiadających im tabelach w prosty i efektywny sposób. Każdy z modeli jest rozszerzeniem klasy bazodanowej Illuminate\Database\Eloquent\Model, co oznacza, że można w nim korzystać z udostępnianych przez tą klasę metod.
Załóżmy, że chcemy stworzyć stronę internetową, na której mamy zamiar wyświetlać posty użytkowników. Do tego będzie nam potrzebna tabela bazodanowa z postami oraz model, poprzez który będziemy się odnosić do naszej tabeli, zapisywać w niej dane oraz pozyskiwać znajdujące się w niej informacje. Za chwilę omówię pracę z modelami na kilku praktycznych przykładach. Zanim przejdziemy do praktyki, uprzejmie proszę czytelników, którzy śledzili poprzednie części szkolenia o usunięcie z bazy danych utworzonej tabeli o nazwie posts, jeśli oczywiście ją utworzyli.
Cofanie migracji
Aby przywrócić poprzednią wersje bazy danych, można użyć polecenia php artisan migrate:rollback. To polecenie wycofuje ostatnią "partię" migracji, która może zawierać wiele plików migracji.
Zobaczmy jak taka akcja powinna wyglądać w przypadku naszej szkoleniowej aplikacji:
Cofanie migracji w Laravel |
rm database/migrations/2017_11_25_195109_create_posts_table.php -fr
Modele i migracje
Tworzenie modelu odbywa się za pomocą polecenia
php artisan make:model
Wraz modelem można automatycznie utworzyć odpowiednią migrację, dodając parametr –migration, ale nie jest to koniecznie, gdyż można utworzyć odpowiednią migrację w osobnym kroku, korzystając z omówionego w jednej z poprzednich części szkolenia sposobu.Zanim przejdziemy do praktyki i utworzymy nasz pierwszy model, wspomnę, że w przypadku tworzenia migracji wraz z tworzonym modelem, Laravel automatycznie tworzy tabele noszącą nazwę w liczbie mnogiej odnośnie do nazwy modelu, oczywiście w języku angielskim. Przykładowo, jeśli model to post, tabela będzie nosiła nazwę posts. Można jednak temu zapobiec i nadać własną nazwę tabeli, określając ją parametrem -–create=nazwa_tabeli w osobnym kroku tworzenia migracji za pomocą polecenia php artisan make:migration
Zobaczmy jak to wszystko wygląda w praktyce. Z wiersza poleceń i z poziomu katalogu naszej szkoleniowej aplikacji nauka, stwórzmy nasz pierwszy model o nazwie Post, wraz ze skryptem migracyjnym, który będzie odpowiedzialny na utworzenie tabeli bazodanowej:
Tworzenie modelu |
Zmodyfikujmy teraz skrypt migracyjny i dodajmy do niego linie umożliwiające utworzenie kolumn związanych z tytułem i ciałem postów, podobnie jak we wcześniejszej części szkolenia. Docelowo metoda up() naszego szkoleniowego skryptu migracyjnego powinna wyglądać następująco:
public function up() {
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
// Tytuł i ciało posta
$table->string('title');
$table->text('body');
})
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
// Tytuł i ciało posta
$table->string('title');
$table->text('body');
})
Po zmodyfikowaniu skryptu w wyżej udokumentowany sposób możemy przystąpić do wdrożenia nowej wersji bazy danych:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//
}
?>
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//
}
?>
Jak zapewne łatwo czytelnikom wywnioskować z powyższego kodu i o czym już wspomniałem wcześniej, klasa \App\Post jest rozszerzeniem Illuminate\Database\Eloquent\Model, co oznacza, że możemy się poprzez instancje obiektów tej klasy odwoływać do bazodanowych funkcji modelu Eloquenta, jednak ich działania będą skierowane do tabeli posts, ponieważ jest to tabela bazy danych powiązana z modelem Post.
Na początku może się to wydawać trudne do zrozumienia, ale kilka przykładów powinno wszystko wyjaśnić. Zanim posłużę się Modelami w skryptach php naszej szkoleniowej aplikacji, udokumentuję kilka prostych operacji bazodanowych, które wykonam z poziomu interfejsu Laravel php artisan tinker.
Od modelu do tabeli
W części pt. Laravel od podstaw: tabele bazodanowe i dynamiczne widoki zaprezentowałem metodę DB::table() oraz sposób wprowadzania nowych rekordów do tabeli. Wyglądało to tak:
DB::table('posts')->insert(['title'=>'Nasz pierwszy post', 'body'=>'Lorem ipsum.... blabablabla...']);
Natomiast pozyskiwanie rekordów z tabeli wyglądało tak:
DB::table('posts')->get();
Te same działania można wykonać odwołując się do metod modelu Eloquent poprzez klasę naszego modelu, w bardziej przejrzysty i skuteczny sposób. Skorzystam z powłoki php artisan tinker, aby na początek wprowadzić kilka przykładowych rekordów do tabeli, a następnie je pozyskać na różne sposoby:
Wiemy już wystarczająco wiele, aby nasza szkoleniowa funkcja w pliku routes/web.php zwracająca widok z tytułami postów wyglądała następująco:
Route::get('/posty', function() {
/**
* Ten sposób został omówiony w poprzedniej części szkolenia
* $posts = DB::table('posts')->get();
*/
// Tego nauczyliśmy się teraz - widoczny efekt jest taki sam
$posts = \App\Post::all();
return view('posts.index', compact('posts'));
});
/**
* Ten sposób został omówiony w poprzedniej części szkolenia
* $posts = DB::table('posts')->get();
*/
// Tego nauczyliśmy się teraz - widoczny efekt jest taki sam
$posts = \App\Post::all();
return view('posts.index', compact('posts'));
});
W niniejszej części szkolenia dowiedzieliśmy się czym są modele oraz jaka jest relacja pomiędzy nimi, a tabelami bazy danych. Nauczyliśmy się odwoływać do tabeli bazy danych poprzez klasę modelu, korzystając z metod Eloquent'a. Zobaczyliśmy kilka praktycznych przykładów pracy z modelami w powłoce php artisan tinker oraz praktyczne zastosowanie modelu szkoleniowego Post w funkcji trasy. W kolejnej części szkolenia mam zamiar zaprezentować kontrolery zasobów oraz zastosować w funkcjach kontrolerów zasobów to czego nauczyliśmy się o modelach i nieco więcej.
Serdecznie zapraszam do kolejnej części niniejszego szkolenia, p.t. Kontrolery zasobów
Solidnie napisane. Pozdrawiam i liczę na więcej ciekawych artykułów.
OdpowiedzUsuńTakie kwestie faktycznie są bardzo ważne ale niestety ja z komputerami raczej jestem na bakier. Na całe szczęście jak coś u mnie popsuje to wiem, że informatyk z https://informatyk.warszawa.pl/ jest w stanie sobie z tym poradzić błyskawicznie.
OdpowiedzUsuńJeśli chodzi o obsługę komputera, nie można zapomnieć o jednym z najbardziej popularnych programów biurowych - Outlook. Jest to nie tylko program do obsługi poczty elektronicznej, ale również narzędzie do planowania spotkań, organizacji zadań czy przechowywania kontaktów. Jedną z ciekawych funkcji, o której warto wspomnieć, są emotikony, które można wstawić do swoich wiadomości. Jeśli chcesz poznać więcej na ten temat, proponuję sprawdzić stronę https://martwepiksele.pl/outlook-emotikony-jak-znalezc-i-wstawic/ , gdzie znajdziesz wiele praktycznych wskazówek oraz wideo-tutorial
OdpowiedzUsuń