Содержание
- Основы
- Создание и удаление таблиц
- Добавление полей
- Удаление полей
- Добавление идексов
- Удаление индексов
- Внешние ключи
Основы
Конструктор структур предоставляет методы для создания и модификации таблиц баз данных. Используя легкий синтаксис, вы можете работать с таблицами без привлечения специальных средств SQL.
Рекомендуем прочитать:
Создание и удаление таблиц
Класс 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');
Вы можете легко удалить внешние ключи. Имена внешних ключей аналогичны разделу удаление индексов. Например:
$table->drop_foreign('posts_user_id_foreign');