Bazy Danych - Active Records
14 July 2008
Comments
Połączenie z bazą danych ustawiamy w application/config/database.php. Znajdziemy w nim:
$db['default']['hostname'] = "localhost"; // host bazy danych $db['default']['username'] = "root"; // login, nazwa użytkownika $db['default']['password'] = ""; // hasło do bazy danych $db['default']['database'] = "database_name"; // nazwa bazy danych $db['default']['dbdriver'] = "mysql"; // sterownik: mssql, mysql, mysqli (PHP5 mysql), odbc, postgre, sqlite $db['default']['dbprefix'] = "kurs"; // prefiks table $db['default']['pconnect'] = FALSE; // Czy używać trwałych połączeń $db['default']['db_debug'] = FALSE; // czy pokazywać komunikaty błędów $db['default']['active_r'] = TRUE; // czy załadować klasę Active Records
Następnie przechodzimy do pliku autoload.php i dodajemy "database" do automatycznego ładowania: $autoload['libraries'] = array('database');
Słownictwo
Rekord, wpis, wiersz - jeden "wpis" w tabeli. Np. wpis to dane jednego użytkownika w tabeli użytkowników.Kolumna, pole - określa element w tabeli np. "nazwa użytkownika", "hasło", "strona domowa" to przykładowe pola/kolumny w tabeli użytkowników
Zapytanie, kwerenda - wykonanie operacji na bazie danych - pobranie danych, usunięcie ich itd.
SQL - język w jakim komunikujemy się z bazą danych. Język ten różni się między bazami. O SQL możesz poczytać na wikipedii. Jeżeli interesują cię szczegóły SQL dla twojej bazy danych - zajrzyj do dokumentacji tejże bazy.
Active Records - wersja Code Ignitera
Active Records to pośrednik między naszymi operacjami w bazie danych a wynikowymi zapytaniami SQL. Nie korzystamy z języka SQL - używamy specjalnych metod wykonujących określone czynności w bazie. Z poprzedniego artykułu o modelach wiesz że to w nich przechowuje się kod operujący na bazie danych. W nich powinniśmy (możemy też w kontrolerach) umieścić kod odpowiedzialny za operacje na naszej bazie.Przegląd metod Active Records
Pobranie danych$this->db->get('nazwa tabeli'); $this->db->get('nazwa tabeli', LIMIT); $this->db->get('nazwa tabeli', LIMIT, OFSET);
Warunek WHERE
$this->db->where('nazwa kolumny', wartość);
$array = array('pole' => $wartosc, 'pole2' => $wartosc2, 'pole' => $wartosc); $this->db->where($array);
$this->db->orwhere(takie same parametry);
$this->db->select('pole, pole2, pole3');
$this->db->like('pole', 'wartość');
Operator LIKE w SQL pozwala na wybranie wpisów, zawierających w określonym polu podany "podłańcuch". Np. jeżeli jako wartość podamy "kot" to warunek spełniony byłby dla "koty", "okota" - wszystkie łańcuchy zawierające podany podłańcuch. Metoda like ma takie same opcje z argumentami (tablice też może być) jak where. Istnieje też metoda orlike łącząca warunki przez "lub"Sortowanie wyników
$this->db->orderby('pole', 'desc lub asc');
"desc" posortuje malejąco a "asc" rosnąco.Limit wyników
$this->db->limit(Limit);
Limit można także określić oddzielnie za pomocą tej metodyDodawanie wpisu
$dane = array('pole' => wartość, 'pole2' => wartość); $this->db->insert('tabela', $dane);
Zmiana wpisu
$this->db->update('tabela', $dane);
Parametry jak dla "insert". Modyfikuje wpisy nowymi danymi, zazwyczaj towarzyszy jej warunek WHERE do modyfikacji określonego wpisu.Kasowanie wpisów
$this->db->delete('tabela', array('pole' => wartość, 'pole' => wartość));
Kasuje wpisu, dla których podane pola w tablicy spełniają warunekŁączenie tabel - JOIN
$this->db->select('*'); $this->db->from('tabela1'); $this->db->join('tabela2', 'tabela2.pole = tabela1.pole'); $query = $this->db->get();
Przykładowy model
Oto kod przykładowe modelu modułu news, który zaraz pojawi się w Warsztacie:<?php
class News extends Model
{
function News()
{
parent::Model();
}
function get_news()
{
// Wszystkie newsy sortowane malejąco po news_id
$this->db->orderby("news_id", "desc");
return $this->db->get('news');
}
function add_news($data)
{
// dodanie newsa
return $this->db->insert('news', $data);
}
function update_news($id, $data)
{
// zmiana newsa o podanym numerze news_id
$this->db->where('news_id', $id);
return $this->db->update('news', $data);
}
function delete_news($id)
{
// skasowanie newsa o podanym news_od
$this->db->where('news_id', $id);
return $this->db->delete('news');
}
}
Kod modelu odnosi się do tabeli utworzonej poleceniem SQL:
CREATE TABLE `kurs_news` (
`news_id` smallint(5) unsigned NOT NULL auto_increment,
`news_title` varchar(255) default NULL,
`news_text` text,
`news_date` int(10) unsigned NOT NULL,
PRIMARY KEY (`news_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 ;
RkBlog
Comment article