Poradnik Laravel Eloquent: Modele i różne sposoby ich tworzenia

Każda tabela w bazie danych ma swój odpowiednik ORM w kodzie naszej aplikacji określany jako „Model”. Model jest to klasa służąca do interakcji z danymi w tej tabeli z poziomu kodu. Dzięki niej możemy pobierać, modyfikować albo usuwać dane w tej tabeli.

Jak stworzyć model

Modele tworzymy w katalogu app, chyba, że zdecydujemy inaczej modyfikując odpowiedni wpis w composer.json naszej aplikacji.
Najłatwiej stworzyć model wykonując polecenie Artisan:

php artisan make:model Nazwa_Modelu.

Przykład:

php artisan make:model Post

powyższa komenda spowoduje, że w folderze app/ wyląduje plik o nazwie Post.php z taką zawartością:

Model Post domyślnie będzie ‚współpracował’ z tabelą ‚posts’ w bazie danych. Zwróć uwagę na różnicę – model jest zapisywany w liczbie pojedynczej, natomiast nazwa tabeli w liczbie mnogiej. Jest to domyślna konwencja, w której działa Laravel. Na szczegóły tej konwencji przeznaczę osobny artykuł w tym poradniku.

Model i migracja

Mamy model, ale nie mamy jeszcze tabeli posts, z którą mógłby współpracować. Nie musimy tworzyć jej w kliencie bazy danych lub za pomocą SQL. Laravel, a raczej php artisan daje nam taką możliwość przez dodatnie jednego parametru do komendy tworzenia modelu:

php artisan make:model Nazwa_modelu -m

Przykład:

php artisan make:model Article -m

Parametr -m powoduje, że oprócz modelu Article, do naszej aplikacji dodanie zostany plik migracyjny, w którym możemy opisać schema (schemę?) naszej tabeli. Plik znajduje się w folderze database/migrations i zauważ – mimo, że nasz model ma liczbę pojedynczą (Article), to w nazwie pliku mamy liczbę mnogą (create_articles_table) i taka też będzie nazwa tabeli, jeśli przeprowadzimy tę migrację.

Model, migracja i kontroler

Kolejną rzeczą, jaką możemy stworzyć razem z modelem jest kontroler. Uruchamiamy go parametrem -c (od ang. Controller). Zatem komenda:

php artisan make:model Nazwa_Modelu -mc

powoduje utworzenie modelu, migracji a także kontrolera. Do czego służy kontroler to temat na oddzielny artykuł, generalnie możemy w nim zarządzać/sterować naszym modelem. Czyli go kontrolować.

Przykład:

php artisan make:model Book -mc

W tym przypadku oprócz modelu i migracji, utworzony również zostanie plik szablonowy kontrolera w odpowiednim folderze:

Tworząc kontroler możemy rozszerzyć jego szablonową funkcjonalność o zestaw podstawowych metod CRUD  do ‚obróbki’ tabeli. Robimy to przez przesłanie parametru -r do komendy. Kontroler z takim zestawem metod nazywa się Resource (stąd taki parametr).

php artisan make:model Nazwa_Modelu -mcr

Przykład:

php artisan make:model Car -mcr

Po tej komendzie kontroler CarController posiada metody takie jak store() do zapisywania rekordów, index() do wyciągania aktualnych rekordów itd.

Model, migracja, kontroler i factory

Innym dostępnym parametrem jest -f. Służy do tworzenia Factory. Najczęściej wykorzystuje się je do pisania testów aplikacji.

php artisan make:model Nazwa_Modelu -mcrf

Przykład:

php artisan make: Dog -mcrf

Po powyższym poleceniu w folderze database/factories mamy DogFactory.php:

Jak widzisz, domyślnie ma on nawet funkcję callback z parametrem klasy Faker, która pozwala na automatyczne tworzenie modeli z przypadkowymi danymi, zgodnymi z parametrami, które jej podamy.

I ostatnia komenda na koniec:

php artisan make:model Nazwa_Modelu -all

Jak się pewnie domyślacie, tworzy ona za jednym zamachem wszystkie te rzeczy, które opisałem wyżej. Ciekawostka: wiele z powyższych zadań można wykonać dedykowanymi do tego metodami. Np tworzenie Factory może wyglądać również tak:

php artisan make:factory Dog

To są najważniejsze i najpowszechniejsze metodyki tworzenia modelu i rzeczy ‚okołomodelowych’ w Laravelu. Natomiast jeśli czujesz, że ten artykuł nie wypełnia dostatecznie Twojej żądzy wiedzy na temat komendy make:model, możesz śmiało podejrzeć co jeszcze oferuje, wykonując polecenie php artisan make:model -help.