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

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

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

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

Введение

В 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', array('foo', 'bar')); Поле ENUM
$table->float('amount'); Поле FLOAT
$table->increments('id'); Первичный последовательный ключ (autoincrement)
$table->integer('votes'); Поле INTEGER
$table->longText('description'); Поле LONGTEXT
$table->mediumText('description'); Поле MEDIUMTEXT
$table->morphs('taggable'); Добавляет INTEGER поле taggable_id и STRING поле taggable_type
$table->smallInteger('votes'); Поле SMALLINT
$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->tinyInteger('numbers'); Поле TINYINT
->nullable() Указывает, что поле может быть NULL
->default($value) Указывает значение по умолчанию для поля
->unsigned() Обозначает беззнаковое число (UNSIGNED)
+ 4.2

добавлено в 4.2 ()

Команда Описание
$table->mediumInteger('numbers'); Поле MEDIUMINT
$table->nullableTimestamps(); То же, что и timestamps(), но разрешены значения NULL
$table->rememberToken(); Добавляет поле remember_token с типом VARCHAR(100) NULL

Вставка поля после существующего в MySQL

Если вы используете MySQL, то метод PHPafter() позволит вам вставить поле после определённого существующего поля:

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

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

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

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

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

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

+ 4.2

добавлено в 4.2 ()

Для удаления поля можно использовать метод конструктора таблиц 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(array('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_password_unique'); Удаление уникального индекса на полях email и password из таблицы users
$table->dropIndex('geo_state_index'); Удаление простого индекса из таблицы geo
+ 4.2

добавлено в 4.2 ()

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

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

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

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

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

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

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

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

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

Разметка: ? ?

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