CRUD dla CodeIgniter czyli rozszerzamy modele

Jakiś czas temu Renholder opisał jak rozszerzyć klasę CI_MODEL. W artykule pojawił się odnośnik, do dwóch gotowych projektów tego typu. Jeden z nich to klasa o nazwię codeigniter-base-model autorstwa niejakiego Jamie Rumbelow’a.

Pytanie jest proste – po co w ogóle się za to zabierać? Prawda jest taka, że CI jest dosyć „biedny” w porównaniu do innych frameworków. Nie ma porządnego ORM, nie ma automatycznych modeli – nie ma nic co pozwala na faktycznie szybkie prototypowanie aplikacji. Oczywiście każdy zaraz powie – przecież można napisać sobie samemu! oczywiście – zgadzam się. Przychodzi to z wiekiem – DRY. Jeżeli mogę zaoszczędzić 10 linii kodu, bo ktoś napisał je za mnie. Dlaczego nie. Do dzieła.

Ok. Instalacja biblioteki jest bajecznie prosta. Wystarczy pobrać ją z GitHub’a. Wgrać plik MY_Model.php do folderu application/core i… gotowe. Teraz utworzymy sobie model, który wykorzystuje tą bibliotekę.

Tworzymy pliki post_model.php w folderze application/models. Do środka wkładamy jedna linijkę kodu:

Tyle. Teraz w kontrolerze ładujemy nasz model przez

I już na tym etapie uzyskujemy dostęp do szeregu metod. Jeżeli nie zdefiniujemy własnej tabeli, model będzie spodziewał się tabeli posts w bazie danych. Jeżeli chcemy zdefinować własną możemy to zrobić tak:

Ok. Wracając do naszej biblioteki, jak ułatwia nam ona pracę. Na wiele sposobów – spróbujmy coś wyciągnać z bazy danych:

Proste prawda? Nie trzeba chyba tłumaczyć jaka jest idea poszczególnych opcji. Pobieramy wszystko, dany rekord wg klucza głównego, wyciągam poprzez kolumnę tytuł a finalnie wiele wiersze wg. kolumny status. Oczywiście można przekazywać też całe tablice parametrów:

Teraz dodamy coś do bazy

I zaktualizujemy

Usuwanie rekordów też nie jest bardzo skomplikowane:

Jednak moja ulubiona funkcja tej biblioteki, to obserwatory:

Brzmi znajomo? Tak – dzięki nim możesz zdefiniować dodatkowe akcje po wykonaniu danej operacji na wybranym rekordzie. Czyli „after_delete” – można uruchomić funkcję czyszczącą inne tabele, logi, albo cokolwiek innego. Ewentualnie przeformatować dane przed dodaniem to tabeli korzystając z „before_create”. Użycie jest bardzo proste:

Tyle. Zachęcam do wyprobówania tej klasy przy najbliższym projekcie. Więcej informacji codeigniter-base-model

2 thoughts on “CRUD dla CodeIgniter czyli rozszerzamy modele

  1. Warto zaznaczyć, że walidacja działa tutaj na trochę innych zasadach niż zazwyczaj. Jest przeprowadzana dopiero w momencie dodawania lub modyfikacji danych w tabeli.

    CodeIgniter rzeczywiście nie ma jakoś szczęścia do dedykowanych systemów ORM – DataMapper ORM produkuje często trochę dziwne zapytania (szczególnie przy późnym wiązaniu), a Gas ORM obsługuje jedynie proste zapytania (w sumie ok, ale łączenia czasami jednak się przydają).

  2. Pingback: DataMapper ORM i Gas ORM | CodeIgniter Polska

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.