Может войдёшь?
Черновики Написать статью Профиль

Конструктор таблиц

перевод документация 5.х

  1. 1. Введение
  2. 2. Создание и удаление таблиц
  3. 3. Добавление полей
  4. 4. Изменение полей
  5. 5. Переименование полей
  6. 6. Удаление полей
  7. 7. Проверка на существование
  8. 8. Добавление индексов
  9. 9. Внешние ключи
  10. 10. Удаление индексов
  11. 11. Удаление полей Timestamps и SoftDeletes
  12. 12. Системы хранения
Этот перевод актуален для англоязычной документации на (ветка 5.0). Опечатка? Выдели и нажми Ctrl+Enter.

Данная статья документации актуальна только для версии 5.0 и была удалена в версии 5.1.

Введение

В Laravel, класс PHPSchema представляет собой независимый от БД интерфейс манипулирования таблицами. Он хорошо работает со всеми СУБД, поддерживаемыми Laravel, и предоставляет унифицированный API для любой из этих систем.

Создание и удаление таблиц

Для создания новой таблицы используется метод PHPSchema::create():

PHP
Schema::create('users', function($table)
{
  
$table->increments('id');
});

Первый аргумент метода PHPcreate() — имя таблицы, а второй — замыкание, которое получает объект PHPBlueprint, использующийся для заполнения новой таблицы.

Чтобы переименовать существующую таблицу используется метод PHPrename():

PHP
Schema::rename($from$to);

Для указания того, какое подключение к БД должно использоваться для выполнения операции, используется метод PHPSchema::connection():

PHP
Schema::connection('foo')->create('users', function($table)
{
  
$table->increments('id');
});

Для удаления таблицы вы можете использовать метод PHPSchema::drop():

PHP
Schema::drop('users');

Schema::dropIfExists('users');

Добавление полей

Для обновления существующей таблицы мы будем использовать метод PHPSchema::table():

PHP
Schema::table('users', function($table)
{
  
$table->string('email');
});

Конструктор таблиц поддерживает различные типы полей, которые вы можете использовать при создании таблиц:

Команда Описание
$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, то метод PHPafter() позволит вам вставить поле после определённого существующего поля:

PHP
$table->string('name')->after('email');

Изменение полей

Внимание: Перед изменением полей не забудьте добавить зависимость doctrine/dbal в свой файл composer.json.

Иногда необходимо изменить существующее поле. Например, если надо увеличить размер строкового поля. С методом PHPchange() это легко! Давайте увеличим размер поля name с 25 до 50:

PHP
Schema::table('users', function($table)
{
  
$table->string('name'50)->change();
});

Также мы можем сделать поле обнуляемым (nullable):

PHP
Schema::table('users', function($table)
{
  
$table->string('name'50)->nullable()->change();
});

Переименование полей

Для переименования поля можно использовать метод PHPrenameColumn() объекта конструктора. Перед переименованием полей не забудьте добавить зависимость doctrine/dbal в ваш файл composer.json.

PHP
Schema::table('users', function($table)
{
  
$table->renameColumn('from''to');
});

Внимание: Переименование полей типа ENUM не поддерживается.

Удаление полей

Для удаления поля можно использовать метод конструктора таблиц PHPdropColumn(). Перед удалением поля убедитесь, что в файл composer.json добавлена зависимость confdoctrine/dbal.

Удаление одного поля из таблицы

PHP
Schema::table('users', function($table)
{
  
$table->dropColumn('votes');
});

Удаление нескольких полей таблицы

PHP
Schema::table('users', function($table)
{
  
$table->dropColumn(['votes''avatar''location']);
});

Проверка на существование

Вы можете легко проверить существование таблицы или поля с помощью методов PHPhasTable() и PHPhasColumn().

Проверка существования таблицы

PHP
if (Schema::hasTable('users'))
{
  
//
}

Проверка существования поля

PHP
if (Schema::hasColumn('users''email'))
{
  
//
}

Добавление индексов

Конструктор таблиц поддерживает несколько типов индексов. Есть два способа добавлять индексы. Первый — определять их на самих полях, либо добавлять отдельно:

PHP
$table->string('email')->unique();

Или вы можете добавлять их отдельными строками. Ниже список всех доступных типов индексов:

Команда Описание
$table->primary('id'); Добавляет первичный ключ
$table->primary(['first', 'last']); Добавляет составной первичный ключ
$table->unique('email'); Добавляет уникальный индекс
$table->index('state'); Добавляет простой индекс

Внешние ключи

Laravel поддерживает добавление внешних ключей (foreign key constraints) для ваших таблиц:

PHP
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');

В этом примере мы указываем, что поле user_id связано с полем id таблицы users. Не забудьте сначала создать поле для внешних ключей!

Вы также можете задать действия, происходящие при обновлении (on update) и удалении (on delete) записей:

PHP
$table->foreign('user_id')
      ->
references('id')->on('users')
      ->
onDelete('cascade');

Для удаления внешнего ключа используется метод PHPdropForeign(). Схема именования ключей — та же, что и для индексов:

PHP
$table->dropForeign('posts_user_id_foreign');

Внимание: при создании внешнего ключа, указывающего на инкрементное числовое поле, не забудьте сделать поле внешнего ключа типа UNSIGNED.

Удаление индексов

Для удаления индекса вы должны указать его имя. По умолчанию Laravel присваивает каждому индексу осознанное имя. Просто объедините имя таблицы, имена всех его полей и добавьте тип индекса. Вот несколько примеров:

Команда Описание
$table->dropPrimary('users_id_primary'); Удаление первичного ключа из таблицы users
$table->dropUnique('users_email_unique'); Удаление уникального индекса из таблицы users
$table->dropIndex('geo_state_index'); Удаление простого индекса из таблицы geo

Удаление полей Timestamps и SoftDeletes

Для удаления полей с типами PHPtimestamps, PHPnullableTimestamps и PHPsoftDeletes используйте следующие методы:

Команда Описание
$table->dropTimestamps(); Удаляет из таблицы поля created_at и updated_at
$table->dropSoftDeletes(); Удаляет из таблицы поле deleted_at

Системы хранения

Для задания конкретной системы хранения таблицы задайте свойство PHPengine конструктора таблиц:

PHP
Schema::create('users', function($table)
{
  
$table->engine 'InnoDB';

  
$table->string('email');
});

Система хранения — тип архитектуры таблицы. Некоторые СУБД поддерживают только свой встроенный тип (такие, как SQLite), в то время другие — например, MySQL — позволяют использовать различные системы даже внутри одной БД (наиболее используемыми являются MyISAM, InnoDB и MEMORY). Правда, использование таблиц различных архитектур в одном запросе заметно снижает его производительность — прим. пер.

Комментарии (1)

yoda_code

Здравствуйте «Данная статья документации актуальна только для версии 5.0 и была удалена в версии 5.1» значит ли это, что Schema Builder устарел и больше не рекомендуется использовать в Laravel старше 5.1? И если нет, почему документации по Schema Builder нет в версиях выше 5.1?

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.