Класс Database Forge
Класс Database Forge содержит функции, помогающие манипулировать базой данных и структурой таблиц.
Содержание
- Инициализация класса Forge
- Создание БД
- Удаление БД
- Добавление полей
- Добавление ключей
- Создание таблиц
- Удаление таблиц
- Изменение таблиц
Инициализация класса Forge
Важно: Перед запуском данного класса должен быть запущен драйвер для работы с БД!
Загрузка класса производится этим кодом :
$this->load->dbforge()
После инициализации объект можно использовать как $this->dbforge:
$this->dbforge->some_function()
$this->dbforge->create_database('db_name')
Создает базу данных с именем, заданным в параметре. Возвращает TRUE/FALSE в зависимости от результата:
if ($this->dbforge->create_database('my_db'))
{
echo 'База создана!';
}
$this->dbforge->drop_database('db_name')
Удаляет базу данных с именем, заданным в параметре. Возвращает TRUE/FALSE в зависимости от результата:
if ($this->dbforge->drop_database('my_db'))
{
echo 'База удалена!';
}
Создание и удаление таблиц
При создании таблиц можно добавлять новые поля и индексы. CodeIgniter поддерживает механизм для этих действий.
Добавление полей
Поля таблицы задаются как ассоциативный массив. Для каждого поля задается его ключ и значение. Например, ключ - 'type', возможные значения - INT, VARCHAR, TEXT, и т.д.
$fields = array(
'users' => array(
'type' => 'varchar',
'constraint' => '100',
),
);
// будет создано поле "users VARCHAR(100)"
Так же могут использоваться следующие ключи/значения:
- unsigned/true : создание типа "UNSIGNED" в описании поля
- default/value : создание значения по умолчанию
- null/true : создание "NULL" (не обязательного поля). По умолчанию - "NOT NULL"
- auto_increment/true : установка флага auto_increment. Примечание: только для числовых типов.
$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,
),
);
);
После определения полей следует их добавить в таблицу функцией $this->dbforge->add_field($fields) перед созданием таблицы ф-цией create_table().
$this->dbforge->add_field()
Добавление полей к таблице
Использование строк как полей
Если Вы знаете, как задавать описание поля строкой, то можно использовать ее в качестве параметра функции add_field()
$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");
Важно: Можно вызывать add_field() несколько раз. Тогда строки буду соединены воедино.
Создание поля типа id
Это специальное решение для создания полей типа id. Тип - INT(9), флаг auto_incremen, задано как Primary Key.
$this->dbforge->add_field('id');
// = id INT(9) NOT NULL AUTO_INCREMENT
Добавление ключей
Добавление ключей таблицы производится функцией $this->dbforge->add_key('field'). Второй необязательный параметр, заданный как TRUE создает первичный ключ. Заметьте, что вызов add_key() должен следовать перед созданием таблицы create_table().
$this->dbforge->add_key('blog_id', TRUE);
// = PRIMARY KEY (blog_id)
$this->dbforge->add_key('blog_name');
// = KEY (blog_name)
Создание таблицы
После того, как будут определены поля и ключи, нужно создать таблицу:
$this->dbforge->create_table('table_name');
// = CREATE TABLE table_name
Установленный необязательный второй параметр в TRUE добавляет условие "IF NOT EXISTS" при создании таблицы
$this->dbforge->create_table('table_name', TRUE);
// = CREATE TABLE IF NOT EXISTS table_name
Удаление таблицы
Равносильно sql-коду DROP TABLE :
$this->dbforge->drop_table('table_name');
// = DROP TABLE IF EXISTS table_name
Изменение таблиц
$this->dbforge->add_column()
Функция add_column() используется для добавления новых полей в таблицу.
$fields = array(
'preferences' => array('type' => 'TEXT')
);
$this->dbforge->add_column('table_name', $fields);
// = ALTER TABLE sites ADD preferences TEXT
$this->dbforge->drop_column()
Удаляет поле из таблицы.
$this->dbforge->drop_column('table_name', 'column_to_drop');
$this->dbforge->modify_column()
Эта функция идентична add_column(), только позволяет еще и редактировать существующие поля.
$fields = array(
'old_name' => array(
'name' => 'new_name',
'type' => 'TEXT',
),
);
$this->dbforge->modify_column('sites', $fields);
// = ALTER TABLE sites CHANGE old_name new_name TEXT