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.