Для изменения структуры базы данных, Eloquent использует специальный язык, который абстрагирует нас от специфики конкретной СУБД. Он позволяет создавать и менять таблицы, не опираясь на SQL синтаксис конкретной базы данных.

Для создания таблицы, используется метод create($name, $fn), где первый параметр это имя таблицы, второй – функция, внутри которой определяется ее структура.

<?php

Capsule::schema()->create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('email')->unique();
    $table->string('first_name');
    $table->string('password');
    $table->string('last_name');
    $table->timestamps();
});

В Eloquent используется соглашение, что имя таблицы, это имя сущности записанное строчными буквами во множественном числе. Только в таком случае Eloquent сможет автоматически связать класс с таблицей. Вот некоторые примеры:

Класс Таблица
User users
Article articles
ArticleLike article_likes

Из последнего примера видно, что имя класса состоящие из нескольких слов меняет свой формат с CamelCase на snake_case.

Структура таблицы описывается в анонимной функции, в которую передается объект $table. Этот объект содержит множество методов, каждый из которых его меняет. Затем, Eloquent использует этот объект для генерации правильного SQL-запроса.

Метод Описание
bigIncrements($name) Автоинкрементируемый первичный ключ типа эквивалентного UNSIGNED BIGINT
bigInteger($userId) Эквивалент BIGINT
boolean($name) Эквивалент BOOLEAN
string($name, $length) Эквивалент VARCHAR соответствующей длины

По умолчанию поля создаются как not null.

Здесь приведена лишь малая часть того, что умеет делать Eloquent. За описанием остальных методов, лучше обратиться к официальной документации.

Отдельно стоит выделить метод $table->timestamps(). Этот метод добавляет в таблицу два поля: updated_at и created_at. ORM изменяет их автоматически, добавляя туда дату создания и обновления сущности. Это довольно удобное соглашение, которое принято во многих фреймворках на разных языках.

В дополнение к типам колонок перечисленным выше, Eloquent предоставляет методы-модификаторы, которые можно использовать во время создания таблиц. Например модификатор nullable(), убирает ограничение not null.

<?php

Schema::table('users', function (Blueprint $table) {
    $table->string('email')->nullable();
    $table->integer('friends_count')->default(0);
});
Метод Описание
nullable Позволяет использовать NULL как значение
default($value) Задает значение по умолчанию
useCurrent Для колонок типа TIMESTAMP устанавливает дефолтное значение равным CURRENT_TIMESTAMP

Еще из полезного, это создание индексов. Самый распространенный случай – добавление уникального индекса на такие поля как email:

<?php

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

Самостоятельная работа

  1. Откройте и изучите файл src/config/schema.php. Обратите внимание на проверку hasTable, она нужна для обеспечения идемпотентности.
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →