{{TOC}}
{{DOCVER 5.0=f6e862ba51a97f2bf9865f35fd5c522c14af93a1 31.07.2015 15:36:24}}
.(alert)
Данная статья документации актуальна только для версии 5.0 и была удалена в версии 5.1.
== Введение ==
В Laravel, класс %%Schema%% представляет собой независимый от БД интерфейс манипулирования таблицами. Он хорошо работает со всеми СУБД, поддерживаемыми Laravel, и предоставляет унифицированный API для любой из этих систем.
== Создание и удаление таблиц ==
Для создания новой таблицы используется метод %%Schema::create()%%:
%%
Schema::create('users', function($table)
{
$table->increments('id');
});
%%
Первый аргумент метода %%create()%% - имя таблицы, а второй - замыкание, которое получает объект %%Blueprint%%, использующийся для заполнения новой таблицы.
Чтобы переименовать существующую таблицу используется метод %%rename()%%:
%%
Schema::rename($from, $to);
%%
Для указания того, какое подключение к БД должно использоваться для выполнения операции, используется метод %%Schema::connection()%%:
%%
Schema::connection('foo')->create('users', function($table)
{
$table->increments('id');
});
%%
Для удаления таблицы вы можете использовать метод %%Schema::drop()%%:
%%
Schema::drop('users');
Schema::dropIfExists('users');
%%
== Добавление полей ==
Для обновления существующей таблицы мы будем использовать метод %%Schema::table()%%:
%%
Schema::table('users', function($table)
{
$table->string('email');
});
%%
Конструктор таблиц поддерживает различные типы полей, которые вы можете использовать при создании таблиц:
%%(hvlraw)
Команда |
Описание |
$table->bigIncrements('id'); |
Первичный последовательный ключ типа BIGINT |
$table->bigInteger('votes'); |
Поле BIGINT |
$table->binary('data'); |
Поле BLOB |
$table->boolean('confirmed'); |
Поле BOOLEAN |
$table->char('name', 4); |
Поле CHAR с указанной длиной |
$table->date('created_at'); |
Поле DATE |
$table->dateTime('created_at'); |
Поле DATETIME |
$table->decimal('amount', 5, 2); |
Поле DECIMAL с указанной размерностью и точностью |
$table->double('column', 15, 8); |
Поле DOUBLE с указанной точностью |
$table->enum('choices', ['foo', 'bar']); |
Поле ENUM |
$table->float('amount'); |
Поле FLOAT |
$table->increments('id'); |
Первичный последовательный ключ (autoincrement) |
$table->integer('votes'); |
Поле INTEGER |
$table->json('options'); |
Поле JSON |
$table->jsonb('options'); |
Поле JSONB |
$table->longText('description'); |
Поле LONGTEXT |
$table->mediumInteger('numbers'); |
Поле MEDIUMINT |
$table->mediumText('description'); |
Поле MEDIUMTEXT |
$table->morphs('taggable'); |
Добавляет INTEGER поле taggable_id и STRING поле taggable_type |
$table->nullableTimestamps(); |
То же что и timestamps(), но разрешены значения NULL |
$table->smallInteger('votes'); |
Поле SMALLINT |
$table->tinyInteger('numbers'); |
Поле TINYINT |
$table->softDeletes(); |
Добавляет поле deleted_at для мягкого удаления |
$table->string('email'); |
Поле VARCHAR |
$table->string('name', 100); |
Поле VARCHAR с указанной длиной |
$table->text('description'); |
Поле TEXT |
$table->time('sunrise'); |
Поле TIME |
$table->timestamp('added_on'); |
Поле TIMESTAMP |
$table->timestamps(); |
Добавляет поля created_at и updated_at |
$table->rememberToken(); |
Добавляет поле remember_token с типом VARCHAR(100) NULL |
->nullable() |
Указывает, что поле может быть NULL |
->default($value) |
Указывает значение по умолчанию для поля |
->unsigned() |
Переводит INTEGER в беззнаковое число UNSIGNED |
%%
**Вставка поля после существующего в MySQL**
Если вы используете MySQL, то метод %%after()%% позволит вам вставить поле после определённого существующего поля:
%%
$table->string('name')->after('email');
%%
== Изменение полей ==
.(alert)
**Внимание:** Перед изменением полей не забудьте добавить зависимость %%(t)doctrine/dbal%% в свой файл %%(t)composer.json%%.
Иногда необходимо изменить существующее поле. Например, если надо увеличить размер строкового поля. С методом %%change()%% это легко! Давайте увеличим размер поля %%(t)name%% с 25 до 50:
%%
Schema::table('users', function($table)
{
$table->string('name', 50)->change();
});
%%
Также мы можем сделать поле обнуляемым (nullable):
%%
Schema::table('users', function($table)
{
$table->string('name', 50)->nullable()->change();
});
%%
== Переименование полей ==
Для переименования поля можно использовать метод %%renameColumn()%% объекта конструктора. Перед переименованием полей не забудьте добавить зависимость %%(t)doctrine/dbal%% в ваш файл %%(t)composer.json%%.
%%
Schema::table('users', function($table)
{
$table->renameColumn('from', 'to');
});
%%
.(alert)
**Внимание:** Переименование полей типа **ENUM** не поддерживается.
== Удаление полей ==
Для удаления поля можно использовать метод конструктора таблиц %%dropColumn()%%. Перед удалением поля убедитесь, что в файл %%(t)composer.json%% добавлена зависимость %%(conf)doctrine/dbal%%.
**Удаление одного поля из таблицы**
%%
Schema::table('users', function($table)
{
$table->dropColumn('votes');
});
%%
**Удаление нескольких полей таблицы**
%%
Schema::table('users', function($table)
{
$table->dropColumn(['votes', 'avatar', 'location']);
});
%%
== Проверка на существование ==
Вы можете легко проверить существование таблицы или поля с помощью методов %%hasTable()%% и %%hasColumn()%%.
**Проверка существования таблицы**
%%
if (Schema::hasTable('users'))
{
//
}
%%
**Проверка существования поля**
%%
if (Schema::hasColumn('users', 'email'))
{
//
}
%%
== ((#индексы)) Добавление индексов ==
Конструктор таблиц поддерживает несколько типов индексов. Есть два способа добавлять индексы. Первый - определять их на самих полях, либо добавлять отдельно:
%%
$table->string('email')->unique();
%%
Или вы можете добавлять их отдельными строками. Ниже список всех доступных типов индексов:
%%(hvlraw)