Wykorzystanie bazy danych w Amelii jest bardzo proste. Najważniejszym modułem wspierającym framework w tej kwestii jest biblioteka Medoo. Pozwala ona na pewną abstrakcję, zwalnia z konieczności pisania zapytań SQL, jednak nie jest jeszcze pełnym silnikiem obiektowo-relacyjnym (jak np. Doctrine w Symfony, lub Eloquent w Laravelu). Silnik sam generuje zapytania SQL na podstawie prostych metod jak insert, select, czy update oraz przekazanych im parametrów. Do podejścia Medoo należy się przyzwyczaić, jednak nie powinno być to skomplikowane.
Konfiguracja połączenia z bazą danych
Pierwszym koniecznym elementem jest konfiguracja połączenia z bazą. Odpowiednie parametry wprowadza się w pliku konfiguracyjnym config.php (są to parametry wymagane do stworzenia obiektu klasy Medoo oraz PDO, gdyż Medoo bazuje na tej warstwie PHP):
# ---- Database config - values required by Medoo
$conf->db_type = 'mysql';
$conf->db_server = 'localhost';
$conf->db_name = '_database_name';
$conf->db_user = '_user';
$conf->db_pass = '_password';
$conf->db_charset = 'utf8';
# ---- Database config - optional values
$conf->db_port = '3306';
#$conf->db_prefix = '';
$conf->db_option = [ PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ];
Wszystkie opcje są raczej oczywiste i nie wymagają komentarza. Najważniejszą sekcją jest sekcja górna, gdzie należy wskazać rodzaj serwera, jego lokalizację, nazwę bazy, użytkownika oraz hasło. Pozostałe parametry lepiej pozostawić bez zmian (chyba, że wiesz co robisz).
Wykorzystanie bazy danych w kontrolerze
Jednorazowe skonfigurowanie systemu dla danej bazy to jedyny etap przygotowawczy. Później można korzystać z bazy za pomocą obiektu Medoo. W Amelii nie trzeba go tworzyć, jak silnika Smarty. W dowolnym kontrolerze wystarczy użyć metody getDB() klasy App:
...
App::getDB()->insert("kredyt",[
"kwota" => $kwota,
"lat" => $lat,
"procent" => $procent,
"rata" => $rata,
"data" => $data
]);
...
Jak widać, wykonanie wstawienia do bazy danych jest bardzo proste. Podobnie odbywa się aktualizacja (update), jednak razem z poleceniem select te frazy mogą zawierać już warunki filtrujące (fraza WHERE zapytania SQL). Oczywiście całość dokładnie, z wieloma przykładami, opisuje dokumentacja Medoo. Jednak proste przykłady aktualizacji rekordu oraz pobrania listy używając warunków wyszukiwania pokazano poniżej:
//UPDATE osoba SET wiek = '15', plec = "kobieta" WHERE id_osoba = '3' :
App::getDB()->update("osoba",[
"wiek" => 15,
"plec" => "kobieta"
],[
"id_osoba" => 3
]);
//SELECT * FROM osoba WHERE nazwisko = 'Kowalski' :
$records = App::getDB()->select("osoba", "*",[
"nazwisko" => "Kowalski"
]);
Naturalnie, polecenie select zwraca listę rekordów, po której można iterować za pomocą choćby foreach w kontrolerze lub widoku. Poniższy przykład pokazuje pobranie danych w kontrolerze, przekazanie ich widokowi oraz pętlę generującą tabelę po stronie widoku:
//gdzieś w kontrolerze
...
$records = App::getDB()->select("osoba", "*");
App::getSmarty()->assign("lista",$records);
...
wycinek widoku generujący tabelę z przekazanej listy:
//gdzieś w widoku
...
<table cellpadding="5">
{foreach $lista as $wiersz}
<tr>
<td>{$wiersz["imie"]}</td>
<td>{$wiersz["nazwisko"]}</td>
<td>{$wiersz["wiek"]}</td>
<td>{$wiersz["plec"]}</td>
<td>{$wiersz["data_ur"]}</td>
</tr>
{/foreach}
</table>
...