Podręcznik użytkownika CodeIgniter wersja 2.2.1


Klasa Database Forge

Klasa Database Forge zawiera funkcje, które pomogą Ci zarządzać bazą danych.

Spis treści

Ładowanie klasy Forge

Ważne:  Podczas ładowania klasy Forge, driver dla bazy danych musi być już załadowany, ponieważ klasa Forge zależy od niego.

Załaduj klasę Forge w ten sposób:

$this->load->dbforge()

Po załadowaniu klasy, będziesz miał dostęp do jej funkcji za pomocą obiektu $this->dbforge:

$this->dbforge->jakas_funkcja()

$this->dbforge->create_database('nazwa_bd')

Pozwala na utworzenie tabeli określonej w pierwszym paramatrze. Zwraca TRUE/FALSE zależnie od sukcesu lub porażki:

if ($this->dbforge->create_database('moja_bd'))
{
    echo 'Utworzono bazę danych!';
}

$this->dbforge->drop_database('moja_bd')

Pozwala na usunięcie bazy danych, określonej w pierwszym parametrze. Zwraca TRUE/FALSE zależnie od sukcesu lub porażki:

if ($this->dbforge->drop_database('moja_bd'))
{
    echo 'Baza danych usunięta!';
}

Tworzenie i usuwanie tabel

Jest kilka rzeczy, które chciałbyś robić podczas tworzenia tabel. Dodawanie kolumn, dodawanie kluczy do tabeli, zmiana kolumn. CodeIgniter dostarcza do tego mechanizmy.

Dodawanie kolumn

Kolumny są tworzone poprzez tablicę asocjacyjną. Taka tablica musi zawierać klucz 'type', który określa typ danych dla kolumny. Dla przykładu: INT, VARCHAR, TEXT, itd. Wiele typów danych (np. VARCHAR), wymaga dodatkowo klucza 'constraint'.

$fields = array(
                        'users' => array(
                                                 'type' => 'VARCHAR',
                                                 'constraint' => '100',
                                          ),
                );

// zamieni się w "users VARCHAR(100)" kiedy pole zostanie dodane.

Dodatkowo, następujące klucze/wartości mogą zostać użyte:

$fields = array(
                        'blog_id' => array(
                                                 'type' => 'INT',
                                                 'constraint' => 5,
                                                 'unsigned' => TRUE,
                                                 'auto_increment' => TRUE
                                          ),
                        'blog_title' => array(
                                                 'type' => 'VARCHAR',
                                                 'constraint' => '100',
                                          ),
                        'blog_author' => array(
                                                 'type' =>'VARCHAR',
                                                 'constraint' => '100',
                                                 'default' => 'King of Town',
                                          ),
                        'blog_description' => array(
                                                 'type' => 'TEXT',
                                                 'null' => TRUE,
                                          ),
                );

Po tym jak kolumny zostaną zdefiniowane, mogą zostać dodane za pomocą funkcji $this->dbforge->add_field($fields);, która musi być poprzedzona wywołaniem funkcji create_table().

$this->dbforge->add_field()

Funkcja dodająca kolumny akceptuje powyższą tablicę.

Przypisywanie ciągu znaków jako kolumn

Jeśli wiesz dokładnie, w jaki sposób kolumna ma zostać stworzona, do funkcji add_field(), możesz przypisać ciąg znaków dla definicji kolumny.

$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");

Uwaga: Wiele odwołań do add_field() jest łączonych w jedno.

Tworzenie kolumny id

Istnieje specjalny wyjątek dla tworzenia kolumny id. Kolumna o typie id będzie automatycznie przypisana jako INT(9) auto_incrementing Primary Key.

$this->dbforge->add_field('id');
// daje id INT(9) NOT NULL AUTO_INCREMENT

Dodawanie kluczy

Zazwyczaj, będziesz chciał aby Twoja tabela miała klucze. Można to osiągnąć dzięki funkcji $this->dbforge->add_key('field'). Opcjonalny drugi parametr ustawiony na TRUE, sprawi że wartość zostanie ustawiona na primary key. Zauważ, że wywołanie funkcji add_key() musi zostać poprzedzone wywołaniem funkcji create_table().

Wiele kolumn z kluczem non-primary musi zostać wysłanych jako tablica. Poniżej przykład dla MySQL.

$this->dbforge->add_key('blog_id', TRUE);
// daje PRIMARY KEY `blog_id` (`blog_id`)

$this->dbforge->add_key('blog_id', TRUE);
$this->dbforge->add_key('site_id', TRUE);
// daje PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)

$this->dbforge->add_key('blog_name');
// daje KEY `blog_name` (`blog_name`)

$this->dbforge->add_key(array('blog_name', 'blog_label'));
// daje KEY `blog_name_blog_label` (`blog_name`, `blog_label`)

Tworzenie tabeli

Po tym jak zostały stworzone kolumny i klucze, możesz stworzyć tabelę za pomocą funkcji

$this->dbforge->create_table('table_name');
// daje CREATE TABLE table_name

Opcjonalny drugi parametr ustawiony na TRUE, dodaje klauzulę "IF NOT EXISTS" do definicji tabeli

$this->dbforge->create_table('table_name', TRUE);
// daje CREATE TABLE IF NOT EXISTS table_name

Usuwanie tabeli

Funkcja wykonuje DROP TABLE nazwa_tabeli

$this->dbforge->drop_table('table_name');
// daje DROP TABLE IF EXISTS table_name

Zmiana nazwy tabeli

Funkcja wykonuje zmianę nazwy tabeli

$this->dbforge->rename_table('old_table_name', 'new_table_name');
// daje ALTER TABLE old_table_name RENAME TO new_table_name

Modyfikowanie tabel

$this->dbforge->add_column()

Funkcja add_column() jest używana, aby dokonać zmian w istniejącej tabeli. Akceptuje te same pola w postaci tablicy jak powyżej i może zostać użyta dla nieograniczonej ilości kolumn.

$fields = array(
                        'preferences' => array('type' => 'TEXT')
);
$this->dbforge->add_column('table_name', $fields);

// daje ALTER TABLE table_name ADD preferences TEXT

$this->dbforge->drop_column()

Funkcja jest używana do usuwania kolumn z tabeli.

$this->dbforge->drop_column('table_name', 'column_to_drop');

$this->dbforge->modify_column()

Zasada działania tej funkcji taka sama jak funkcji add_column(), z tą różnicą, że nadpisuje ona istniejącą kolumnę, a nie dodaje nową. Aby zmienić nazwę kolumny mozesz dodać klucz "name" do tablicy definicji.

$fields = array(
                        'old_name' => array(
                                                         'name' => 'new_name',
                                                         'type' => 'TEXT',
                                                ),
);
$this->dbforge->modify_column('table_name', $fields);

// daje ALTER TABLE table_name CHANGE old_name new_name TEXT