2. Создание БД. Миграции
30 Мая 2020 22:55 (Редактировано: 03 Июня 2020 22:57)
Миграции БД в Laravel позволяют простым способом определить структуру таблицы базы данных и выполнять модификации с использованием простого и выразительного PHP кода.
Ссылка на страницу в документации - Laravel Миграции.
Требования к серверу Базы данных
- MySQL/MariaDB 5.6+
- PostgreSQL 9.4+
- SQLite 3.8.8+
- SQL Server 2017+
Создание Базы данных
CREATE SCHEMA `database` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
Прописываем в .env
файле данные для подключения.
Создаем миграции
Laravel имеет свой интерфейс командной строки под названием Artisan. Миграции создаются с помощью этого интерфейса. Пишем в командную строку:
php artisan make:model Models/BlogCategory -m
php artisan make:model Models/BlogPost -m
Таким образом, будут созданы миграции и помещены в директорию migrations
. Также будет создана директория models
и в нее помещены свежесозданные модели BlogCategory.php
и BlogPost.php
.
В файле миграции присутствует два основных метода: up
и down
. Up - накатывает изменения в таблицу БД, Down - Откатывает, если нужно довнести изменения.
Также, интересный момент - При создании миграции
BlogCategory
, laravel автоматически создает название для таблицы через нижнее подчеркиваниеblog_category
Теперь можно запустить команду миграции и создадутся соответствующие таблицы в базе данных.
php artisan migrate
Могут возникнуть проблемы при осуществлении миграций, если используется сервер баз даных Maria DB. Для решения вопроса необходимо в файл \app\Providers\AppServiceProvider.php добавить в начало файла
use Illuminate\Support\Facades\Schema;
а также это:
public function boot() { \Schema::defaultStringLength(191); }
В документации это описано.
Создание структуры таблиц
По умолчанию, в laravel уже присутствует модель User.php
- ее можно перенести во вновьсозданную директорию models
т.к. User.php
, все таки, относится к моделям. И необходимо не забыть подправить пространство имен у этой модели, пишем - namespace App\Models;
В laravel "из коробки" идет структура для вновьсозданных таблиц: id
, created_at
, updated_at
и чуть по более набор полей для users
. Создание этих полей прописано в файлах миграций в методе up
, например, чтобы создать набор полей для дат используется вызов метода $table->timestamps()
. Точно также метод $table->softDeletes();
создаст поле deleted_at
.
Поэтому, чтобы создать необходимые нам поля, можно дропнуть базу, создать ее заново и произвести миграции уже после наполнения метода up у моделей BlogCategories и BlogPosts следующим содержимым:
BlogCategories
public function up()
{
Schema::create('blog_categories', function (Blueprint $table) {
$table->increments('id');
$table->integer('parent_id')->unsigned()->default(1);
$table->string('slug')->unique();
$table->string('title');
$table->text('description')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
BlogPosts
public function up()
{
Schema::create('blog_posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->unsigned();
$table->bigInteger('user_id')->unsigned();
$table->string('slug')->unique();
$table->string('title');
$table->text('excerpt')->nullable();
$table->text('content_raw');
$table->text('content_html');
$table->boolean('is_published')->default(false);
$table->timestamp('published_at')->nullable();
$table->timestamps();
$table->softDeletes();
//Привязка этой таблицы к другим таблицам - users и blog_categories по определенным полям.
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('category_id')->references('id')->on('blog_categories');
$table->index('is_published');
});
}
Далее снова выполняем миграцию
php artisan migrate
На этом этапе будут созданы все указанные таблицы со всеми необходимыми полями.