Класс Database Forge
Класс Database Forge содержит методы, которые помогают управлять вашей базой данных.
- Инициализация класса Forge
- Создание и удаление баз данных
- Создание и удаление таблиц
- Модификация таблиц
- Справочник по классу
Инициализация класса Forge
Важно
Для инициализации класса Forge ваш драйвер базы данных должен быть уже запущен, так как класс forge полагается на него.
Загрузите класс Forge следующим образом:
$forge = \Config\Database::forge();
Вы также можете передать другое имя группы базы данных в загрузчик DB Forge, если база данных, которую вы хотите управлять, не является стандартной:
$this->myforge = \Config\Database::forge('other_db');
В приведенном выше примере мы передаем имя другой группы баз данных для подключения в качестве первого параметра.
Создание и удаление баз данных
$forge->createDatabase(‘db_name’)
Позволяет создать базу данных, указанную в первом параметре. Возвращает true/false в зависимости от успеха или неудачи:
if ($forge->createDatabase('my_db')) {
echo 'Database created!';
}
Дополнительный второй параметр, установленный в true, добавит оператор IF EXISTS или проверит, существует ли база данных, прежде чем создать ее (в зависимости от СУБД).
$forge->createDatabase('my_db', true);
// gives CREATE DATABASE IF NOT EXISTS `my_db`
// or will check if a database exists
$forge->dropDatabase(‘db_name’)
Позволяет удалить базу данных, указанную в первом параметре. Возвращает true/false в зависимости от успеха или неудачи:
if ($forge->dropDatabase('my_db')) {
echo 'Database deleted!';
}
Создание баз данных в командной строке
CodeIgniter поддерживает создание баз данных непосредственно из вашей любимой консоли с помощью специальной команды db:create. Используя эту команду, предполагается, что база данных еще не существует. В противном случае CodeIgniter сообщит об ошибке при создании базы данных.
Для начала просто введите команду и имя базы данных (например, foo):
php spark db:create foo
Если все прошло хорошо, вы должны увидеть сообщение Database "foo" successfully created..
Если вы находитесь в тестовой среде или используете драйвер SQLite3, вы можете передать расширение файла, в котором будет создана база данных, используя опцию --ext. Допустимые значения — db и sqlite, по умолчанию db. Помните, что перед ними не должно быть точки.
php spark db:create foo --ext sqlite // will create the db file in WRITEPATH/foo.sqlite
Примечание
При использовании специального имени базы данных SQLite3 :memory:, ожидайте, что команда всё ещё отобразит сообщение об успехе, но файл базы данных не будет создан. Это потому, что SQLite3 будет использовать базу данных в памяти.
Создание и удаление таблиц
При создании таблиц вам может потребоваться выполнить несколько действий. Добавить поля, добавить ключи в таблицу, изменить столбцы. CodeIgniter предоставляет механизм для этого.
Добавление полей
Поля обычно создаются с помощью ассоциативного массива. В массиве необходимо указать ключ ‘type’, который соответствует типу данных поля. Например, INT, VARCHAR, TEXT и т.д. Многие типы данных (например, VARCHAR) также требуют ключа ‘constraint’.
$fields = [
'users' => [
'type' => 'VARCHAR',
'constraint' => 100,
],
];
// will translate to "users VARCHAR(100)" when the field is added.
Кроме того, можно использовать следующие пары ключ/значение:
- unsigned/true : для генерации «UNSIGNED» в определении поля.
- default/value : для генерации значения по умолчанию в определении поля.
- null/true : для генерации «null» в определении поля. Без этого поле по умолчанию будет «NOT null».
- auto_increment/true : генерирует флаг автоинкремента для поля. Обратите внимание, что тип поля должен поддерживать это, например, целое число.
- unique/true : для генерации уникального ключа для определения поля.
$fields = [
'id' => [
'type' => 'INT',
'constraint' => 5,
'unsigned' => true,
'auto_increment' => true
],
'title' => [
'type' => 'VARCHAR',
'constraint' => '100',
'unique' => true,
],
'author' => [
'type' =>'VARCHAR',
'constraint' => 100,
'default' => 'King of Town',
],
'description' => [
'type' => 'TEXT',
'null' => true,
],
'status' => [
'type' => 'ENUM',
'constraint' => ['publish', 'pending', 'draft'],
'default' => 'pending',
],
];
После определения полей их можно добавить, используя $forge->addField($fields);, за которым следует вызов метода createTable().
$forge->addField()
Метод addField примет указанный выше массив.
Передача строк в качестве полей
Если вы точно знаете, как хотите создать поле, вы можете передать строку в определения полей с помощью addField()
$forge->addField("label varchar(100) NOT NULL DEFAULT 'default label'");
Примечание
Передача необработанных строк в качестве полей не может сопровождаться вызовами addKey() для этих полей.
Примечание
Многократные вызовы addField() накапливаются.
Создание поля id
Существует специальное исключение для создания полей id. Поле с типом id автоматически будет назначено как INT(9) автоинкрементирующий первичный ключ.
$forge->addField('id');
// gives `id` INT(9) NOT NULL AUTO_INCREMENT
Добавление ключей
Как правило, вы захотите, чтобы ваша таблица имела ключи. Это достигается с помощью $forge->addKey(‘field’). Необязательный второй параметр, установленный в true, сделает его первичным ключом, а третий параметр, установленный в true, сделает его уникальным ключом. Обратите внимание, что addKey() должен быть после вызова createTable().
Непервичные ключи с несколькими столбцами должны быть отправлены в виде массива. Пример вывода ниже для MySQL.
$forge->addKey('blog_id', true);
// gives PRIMARY KEY `blog_id` (`blog_id`)
$forge->addKey('blog_id', true);
$forge->addKey('site_id', true);
// gives PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)
$forge->addKey('blog_name');
// gives KEY `blog_name` (`blog_name`)
$forge->addKey(['blog_name', 'blog_label']);
// gives KEY `blog_name_blog_label` (`blog_name`, `blog_label`)
$forge->addKey(['blog_id', 'uri'], false, true);
// gives UNIQUE KEY `blog_id_uri` (`blog_id`, `uri`)
Для улучшения читаемости кода также можно добавлять первичные и уникальные ключи с помощью конкретных методов:
$forge->addPrimaryKey('blog_id');
// gives PRIMARY KEY `blog_id` (`blog_id`)
$forge->addUniqueKey(['blog_id', 'uri']);
// gives UNIQUE KEY `blog_id_uri` (`blog_id`, `uri`)
Добавление внешних ключей
Внешние ключи помогают обеспечить взаимосвязи и действия между вашими таблицами. Для таблиц, которые поддерживают внешние ключи, вы можете добавить их непосредственно в forge:
$forge->addForeignKey('users_id','users','id');
// gives CONSTRAINT `TABLENAME_users_foreign` FOREIGN KEY(`users_id`) REFERENCES `users`(`id`)
$forge->addForeignKey(['users_id', 'users_name'],'users',['id', 'name']);
// gives CONSTRAINT `TABLENAME_users_foreign` FOREIGN KEY(`users_id`, `users_name`) REFERENCES `users`(`id`, `name`)
Вы можете указать желаемое действие для свойств «on delete» и «on update» ограничения:
$forge->addForeignKey('users_id','users','id','CASCADE','CASCADE');
// gives CONSTRAINT `TABLENAME_users_foreign` FOREIGN KEY(`users_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
$forge->addForeignKey(['users_id', 'users_name'],'users',['id', 'name'],'CASCADE','CASCADE');
// gives CONSTRAINT `TABLENAME_users_foreign` FOREIGN KEY(`users_id`, `users_name`) REFERENCES `users`(`id`, `name`) ON DELETE CASCADE ON UPDATE CASCADE
Создание таблицы
После объявления полей и ключей вы можете создать новую таблицу с помощью
$forge->createTable('table_name');
// gives CREATE TABLE table_name
Необязательный второй параметр, установленный в true, добавляет в определение условие «IF NOT EXISTS»
$forge->createTable('table_name', true);
// gives CREATE TABLE IF NOT EXISTS table_name
Вы также можете передать необязательные атрибуты таблицы, такие как атрибуты MySQL ENGINE:
$attributes = ['ENGINE' => 'InnoDB'];
$forge->createTable('table_name', false, $attributes);
// produces: CREATE TABLE `table_name` (...) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
Примечание
Если вы не укажете атрибуты CHARACTER SET и/или COLLATE, createTable() всегда будет добавлять их с вашими настроенными значениями charset и DBCollat, если они не пустые (только MySQL).
Удаление таблицы
Выполните оператор DROP TABLE и необязательно добавьте условие IF EXISTS.
// Produces: DROP TABLE `table_name`
$forge->dropTable('table_name');
// Produces: DROP TABLE IF EXISTS `table_name`
$forge->dropTable('table_name', true);
Третий параметр может быть передан для добавления опции «CASCADE», которая может потребоваться некоторым драйверам для обработки удаления таблиц с внешними ключами.
// Produces: DROP TABLE `table_name` CASCADE
$forge->dropTable('table_name', false, true);
Удаление внешнего ключа
Выполните оператор DROP FOREIGN KEY.
// Produces: ALTER TABLE `tablename` DROP FOREIGN KEY `users_foreign`
$forge->dropForeignKey('tablename','users_foreign');
Удаление ключа
Выполните оператор DROP KEY.
// Produces: DROP INDEX `users_index` ON `tablename`
$forge->dropKey('tablename','users_index');
Переименование таблицы
Выполняет переименование таблицы
$forge->renameTable('old_table_name', 'new_table_name');
// gives ALTER TABLE `old_table_name` RENAME TO `new_table_name`
Модификация таблиц
Добавление столбца в таблицу
$forge->addColumn()
Метод addColumn() используется для модификации существующей таблицы. Он принимает тот же массив полей, что и выше, и может использоваться для неограниченного числа дополнительных полей.
$fields = [
'preferences' => ['type' => 'TEXT']
];
$forge->addColumn('table_name', $fields);
// Executes: ALTER TABLE `table_name` ADD `preferences` TEXT
Если вы используете MySQL или CUBIRD, вы можете воспользоваться их предложениями AFTER и FIRST для размещения нового столбца.
Примеры:
// Will place the new column after the `another_field` column:
$fields = [
'preferences' => ['type' => 'TEXT', 'after' => 'another_field']
];
// Will place the new column at the start of the table definition:
$fields = [
'preferences' => ['type' => 'TEXT', 'first' => true]
];
Удаление столбцов из таблицы
$forge->dropColumn()
Используется для удаления столбца из таблицы.
$forge->dropColumn('table_name', 'column_to_drop'); // to drop one single column
Используется для удаления нескольких столбцов из таблицы.
$forge->dropColumn('table_name', 'column_1,column_2'); // by proving comma separated column names
$forge->dropColumn('table_name', ['column_1', 'column_2']); // by proving array of column names
Модификация столбца в таблице
$forge->modifyColumn()
Использование этого метода идентично addColumn(), за исключением того, что он изменяет существующий столбец, а не добавляет новый. Для изменения имени вы можете добавить ключ «name» в массив определения поля.
$fields = [
'old_name' => [
'name' => 'new_name',
'type' => 'TEXT',
],
];
$forge->modifyColumn('table_name', $fields);
// gives ALTER TABLE `table_name` CHANGE `old_name` `new_name` TEXT
Справочник по классу
-
CodeIgniter\Database\Forge -
-
addColumn($table[, $field = []]) -
Параметры: - $table (string) – Имя таблицы, к которой добавляется столбец
- $field (array) – Определение столбца(ов)
Возвращаемое значение: true при успехе, false при ошибке
Тип возвращаемого значения: bool
Добавляет столбец в таблицу. Использование: см. Добавление столбца в таблицу.
-
addField($field) -
Параметры: - $field (array) – Определение поля для добавления
Возвращаемое значение: Экземпляр CodeIgniterDatabaseForge (цепление методов)
Тип возвращаемого значения: CodeIgniterDatabaseForge
Добавляет поле в набор, который будет использоваться для создания таблицы. Использование: см. Добавление полей.
-
addForeignKey($fieldName, $tableName, $tableField[, $onUpdate = '', $onDelete = '']) -
Параметры: - $fieldName (string|string[]) – Название поля ключа или массив полей
- $tableName (string) – Имя родительской таблицы
- $tableField (string|string[]) – Название поля родительской таблицы или массив полей
- $onUpdate (string) – Желаемое действие для «on update»
- $onDelete (string) – Желаемое действие для «on delete»
Возвращаемое значение: Экземпляр CodeIgniterDatabaseForge (цепление методов)
Тип возвращаемого значения: CodeIgniterDatabaseForge
Добавляет внешний ключ в набор, который будет использоваться для создания таблицы. Использование: см. Добавление внешних ключей.
-
addKey($key[, $primary = false[, $unique = false]]) -
Параметры: - $key (mixed) – Название поля ключа или массив полей
- $primary (bool) – Устанавливается в true, если это должен быть первичный ключ или обычный
- $unique (bool) – Устанавливается в true, если это должен быть уникальный ключ или обычный
Возвращаемое значение: Экземпляр CodeIgniterDatabaseForge (цепление методов)
Тип возвращаемого значения: CodeIgniterDatabaseForge
Добавляет ключ в набор, который будет использоваться для создания таблицы. Использование: см. Добавление ключей.
-
addPrimaryKey($key) -
Параметры: - $key (mixed) – Название поля ключа или массив полей
Возвращаемое значение: Экземпляр CodeIgniterDatabaseForge (цепление методов)
Тип возвращаемого значения: CodeIgniterDatabaseForge
Добавляет первичный ключ в набор, который будет использоваться для создания таблицы. Использование: см. Добавление ключей.
-
addUniqueKey($key) -
Параметры: - $key (mixed) – Название поля ключа или массив полей
Возвращаемое значение: Экземпляр CodeIgniterDatabaseForge (цепление методов)
Тип возвращаемого значения: CodeIgniterDatabaseForge
Добавляет уникальный ключ в набор, который будет использоваться для создания таблицы. Использование: см. Добавление ключей.
-
createDatabase($dbName[, $ifNotExists = false]) -
Параметры: - $db_name (string) – Имя базы данных для создания
- $ifNotExists (string) – Установите в true, чтобы добавить условие ‘IF NOT EXISTS’ или проверить, существует ли база данных
Возвращаемое значение: true при успехе, false при ошибке
Тип возвращаемого значения: bool
Создает новую базу данных. Использование: см. Создание и удаление баз данных.
-
createTable($table[, $if_not_exists = false[, array $attributes = []]]) -
Параметры: - $table (string) – Имя таблицы для создания
- $if_not_exists (string) – Установите в true, чтобы добавить условие ‘IF NOT EXISTS’
- $attributes (string) – Ассоциативный массив атрибутов таблицы
Возвращаемое значение: Объект запроса при успехе, false при ошибке
Тип возвращаемого значения: mixed
Создает новую таблицу. Использование: см. Создание таблицы.
-
dropColumn($table, $column_name) -
Параметры: - $table (string) – Имя таблицы
- $column_names (mixed) – Строка с запятыми или массив имён столбцов
Возвращаемое значение: true при успехе, false при ошибке
Тип возвращаемого значения: bool
Удаляет один или несколько столбцов из таблицы. Использование: см. Удаление столбцов из таблицы.
-
dropDatabase($dbName) -
Параметры: - $dbName (string) – Имя базы данных для удаления
Возвращаемое значение: true при успехе, false при ошибке
Тип возвращаемого значения: bool
Удаляет базу данных. Использование: см. Создание и удаление баз данных.
-
dropTable($table_name[, $if_exists = false]) -
Параметры: - $table (string) – Имя таблицы для удаления
- $if_exists (string) – Установите в true, чтобы добавить условие ‘IF EXISTS’
Возвращаемое значение: true при успехе, false при ошибке
Тип возвращаемого значения: bool
Удаляет таблицу. Использование: см. Удаление таблицы.
-
modifyColumn($table, $field) -
Параметры: - $table (string) – Имя таблицы
- $field (array) – Определение столбца(ов)
Возвращаемое значение: true при успехе, false при ошибке
Тип возвращаемого значения: bool
Изменяет столбец таблицы. Использование: см. Изменение столбца в таблице.
-
-
renameTable($table_name, $new_table_name) -
Параметры: - $table (string) – Текущее имя таблицы
- $new_table_name (string) – Новое имя таблицы
Возвращаемое значение: Объект запроса при успехе, false при ошибке
Тип возвращаемого значения: mixed
Переименовывает таблицу. Использование: См. Переименование таблицы.
-
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/dbmgmt/forge.html