О web-разработке
и даже немного больше...

Создание модели и миграции в Laravel 8.x

Для начала, давайте немного обозначим, определение модели и файлов миграции. Известно, что Laravel является веб-фреймворком, работа которого основана на концепции MVC, широко известная в программировании. Согласно этой концепции, модели выполняют роль звена, между базой данных и непосредственно логикой работы контроллера. Посредством модели мы можем взаимодействовать с базой данных в объектно-ориентированном представлении.

Что касается миграции, то они в свою очередь имеют некоторую аналогию с системами контроля версий, только главное назначение их вносить изменения в базу данных. Таким образом, когда над проектом трудится несколько разработчиков, можно вносить изменения в схему БД веб-приложения, и делиться с другими разработчиками, через Git.

Давайте приступим к примеру создания модели и миграции. Но перед этим убедитесь, что у вас создана база данных и настроена в вашем проекте Laravel.

Создание модели

В Laravel модель представляет из себя класс PHP, с определёнными методами. Создавать этот класс удобно через терминал, посредством консоли artisan. Если вы хорошо разбираетесь в структуре, то можно создать вручную файл, и прописать в нём необходимый класс. Мы же будем использовать консоль, т.к. этот метод более предпочтительный и быстрый.

Переходим в терминал, в папку с проектом Laravel, и выполняем команду:

php artisan make:model Contact -m

Где «Contact» — это название модели, а параметр «-m» позволит создать файл миграции. По умолчанию, файлы моделей создаются в папке /app.

Содержимое файла модели будет выглядеть следующим образом:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Contact extends Model
{
    //
}

Laravel позволяет хранить файлы моделей где угодно, по этой причине, можно завести для файлов моделей отдельную папку.

Модели в отдельной директории

Давайте создадим папку /app/models, в которой будут храниться все модели проекта. Соответственно в эту папку необходимо будет перевести файл модели.
Старый путь: /app/Contact.php
По новому пути: /app/models/Contact.php

Кроме того, после изменения расположения файла, в коде самого файла следует поменять значение namespace. Выглядеть оно будет следующим образом:

namespace App\Models;

На этом создание файла модели завершено, теперь давайте перейдём к файлу миграции.

Файлы миграции

Файл миграции был создан в директории /database/migrations/. В этой папке будут находиться все файлы миграций, которые есть в проекте.

Пример содержимого файла миграций:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateContactsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('contacts', function (Blueprint $table) {
            $table->id();
            $table->string('person_name');
            $table->string('person_email');
            $table->text('message');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('contacts');
    }
}

В этом файле есть два ключевых метода это up() – вызывается при запуске миграции, и down() – вызывается при отмене миграции.
Как вы можете заметить, в методе up(), посредством Schema::create() создаётся таблица «contacts» и указываются поля, которые будут созданы при миграции. В методе down() мы удаляем таблицу «contacts», посредством Schema::dropIfExists().

Запуск миграции выполняется в консоли, посредством команды:

php artisan migrate

Чтобы вернуть миграцию на один шаг назад:

php artisan migrate:rollback

Чтобы отменить миграцию на 3 шага назад:

php artisan migrate:rollback --step 3

Чтобы отменить все миграции:

php artisan migrate:reset

Процесс миграции можно отменять и по шагам, это позволяет более удобно работать со схемами таблиц при разработке.

Исправление ошибок миграции

При попытке выполнить миграцию, вы можете получить такую ошибку:
Specified key was too long error

Ситуацию можно исправить, добавив в файл:
\app\Providers\AppServiceProvider.php

Строку в начале файла:

use Illuminate\Support\Facades\Schema;

и дописать в методе boot() настройку:

public function boot()
{
	Schema::defaultStringLength(191);
}

Подобная ошибка может возникать из-за особенностей версий баз данных. Проблема появляется не всегда, поэтому нужно смотреть по ситуации. Так же рекомендую материал по теме миграции:
https://laravel.com/docs/8.x/migrations

Опубликован: 16.03.2021 г.

См. также:

Как просмотреть SQL запрос в Eloquent Laravel?
Как объявить переменную в шаблоне Laravel Blade?
Проверка на пустоту коллекций Eloquent в Laravel
Как получить URL текущей страницы в Laravel?
Как вывести роуты Laravel в отдельный файл?
Как получить случайные записи из БД в Laravel?
Ограничение выборки (LIMIT) данных в Laravel
Как перенести Laravel на боевой сервер?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта