## Содержание - [Основы](#the-basics) - [Создание и удаление таблиц](#creating-dropping-tables) - [Добавление полей](#adding-columns) - [Удаление полей](#dropping-columns) - [Добавление идексов](#adding-indexes) - [Удаление индексов](#dropping-indexes) - [Внешние ключи](#foreign-keys) ## Основы Конструктор структур предоставляет методы для создания и модификации таблиц баз данных. Используя легкий синтаксис, вы можете работать с таблицами без привлечения специальных средств SQL. *Рекомендуем прочитать:* - [Миграции](/docs/v3/database/migrations) ## Создание и удаление таблиц Класс **Schema** используется для создания и удаления таблиц. Лучше посмотреть примеры: #### Создание таблицы: Schema::create('users', function($table) { $table->increments('id'); }); Рассмотрим этот пример. Метод **create** указывает конструктору таблиц создать новую таблицу 'users', вторым аргументом посредством анонимной (закрытой) функции, которой передается объект таблицы, определяются поля и индексы таблицы. #### Удаление таблицы из базы данных: Schema::drop('users'); #### Удаление таблицы из данного соединения с базой данных: Schema::drop('users', 'connection_name'); Иногда вам может потребоваться указать подключение к базе данных, с которым операции конструктора должны быть выполнены. #### Определение соединения для операций: Schema::create('users', function($table) { $table->on('connection'); }); ## Добавление полей Методы консруктора таблиц позволяют добавить поля без использования утилит SQL. Примеры использования: Команда | Описание ------------- | ------------- `$table->increments('id');` | Инкрементируемый ID `$table->string('email');` | VARCHAR поле `$table->string('name', 100);` | VARCHAR поле с указанием длины `$table->integer('votes');` | INTEGER поле `$table->float('amount');` | FLOAT поле `$table->boolean('confirmed');` | BOOLEAN поле `$table->date('created_at');` | DATE поле `$table->timestamp('added_on');` | TIMESTAMP поле `$table->timestamps();` | Добавление **created\_at** и **updated\_at** полей `$table->text('description');` | TEXT поле `$table->blob('data');` | BLOB поле `->nullable()` | Назначение: поле может иметь значение **NULL** > **Примечание:** "Boolean" типы представляют собой SMALLINT поле применительно к СУБД. #### Пример создания таблицы и добавления полей Schema::table('users', function($table) { $table->create(); $table->increments('id'); $table->string('username'); $table->string('email'); $table->string('phone')->nullable(); $table->text('about'); $table->timestamps(); }); ## Удаление полей #### Удаление поля из таблицы: $table->drop_column('name'); #### Удаление нескольких полей: $table->drop_column(array('name', 'email')); ## Добавление индексов Schema конструктор поддерживает несколько типов индексов. Есть два способа добавитьь индекс. Каждый тип индекса имеет свой метод. Т.е. вы можете назначить индекс при построении таблицы: #### Быстрое создание поля с индексом: $table->string('email')->unique(); Если вам больше нравится определение индексов на отдельной строке, вот пример использования методов для каждого индекса: Команда | Описание ------------- | ------------- `$table->primary('id');` | Добавление первичного ключа `$table->primary(array('fname', 'lname'));` | Добавление составного ключа `$table->unique('email');` | Добавление уникального индекса `$table->fulltext('description');` | Добавление полнотекстового индекса `$table->index('state');` | Добавление обычного индекса ## Удаление индексов Для удаления индекса нужно указать его имя. Laravel присваивает интуитивно понятные имена индексам. Просто соедините имя таблицы с именем индексированного поля, затем добавьте тип индекса. Например: Команда | Описание ------------- | ------------- `$table->drop_primary('users_id_primary');` | Удаление первичного индекса из таблицы "users" `$table->drop_unique('users_email_unique');` | Удаление уникального индекса из таблицы "users" `$table->drop_fulltext('profile_description_fulltext');` | Удаление полнотекстового индекса из таблицы "profile" `$table->drop_index('geo_state_index');` | Удаление основного индекса из таблицы "geo" ## Внешние ключи Вы можете легко добавить внешний ключ к таблице, используя легкий интерфейс Schema конструктора. Например, предположим, у вас есть **user_id** в таблице **posts**, которая ссылается на поле **id** **users** таблицы. Следующий код показывает, как добавить внешний ключ, связанный с полем: $table->foreign('user_id')->references('id')->on('users'); Вы также можете определить "on delete" и "on update" действия с внешним ключом: $table->foreign('user_id')->references('id')->on('users')->on_delete('restrict'); $table->foreign('user_id')->references('id')->on('users')->on_update('cascade'); Вы можете легко удалить внешние ключи. Имена внешних ключей аналогичны разделу [удаление индексов](#dropping-indexes). Например: $table->drop_foreign('posts_user_id_foreign');