В этом уроке я расскажу, что из себя представляют миграции, и расскажу о том, как мы будем создавать таблицы.
Начнем с создания БД, запустите open server, после чего нажмите на уже знакомый вам флажок в правом нижнем углу, выберите дополнительно->PhpMyAdmin Войдите в PhpMyAdmin, как правило пользователь root, а пароль пустой. Создайте новую базу данных, у меня она будет назыаться larablog Теперь надо сказать ларавелю с какой бд мы будем работать, для этого откройте папку с вашим проектом, который вы создали в прошлом уроке, откройте файл .env и отредактируйте его, указав данные для подключения к вашей базе данных, пример ниже
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=larablog DB_USERNAME=root DB_PASSWORD=
В DB_DATABASE я укажите название ваше базы данных, в DB_USERNAME указажите пользователя этой бд - root, DB_PASSWORD - я указывать не стал, т.к. у меня пароля нет, у вас может быть по другому.
Мы будем придерживаться в нашем проекте системы MVC - Мodel View Controller (Модель вид контроллер), если не знаете, что это то советую ознакомиться с этим в интернете более подробно.
Для тех кто не знает я кратко поясню, модель отвечает у нас за взаимодействие с бд, вид - отвечает за отображение информации пользователю, контрллер же занимается управлением.
В ларавел есть папка Controllers, в которой будут наши контроллеры, но нет папки Models, в которой будут наши модели, с чем это связано я не знаю, модели почему то по умолчанию хранятся в папке app, пример тому файл User.php, мне такой подход не нравится, поэтому у меня для моделей будет папка Models, которая в свою очередь будет располагаться в папке app.
Перед тем, как создать нашу первую модель и миграцию, я немного расскажу, что такое миграции. Миграции это штука, которая напоминает систему контроля версий, только в данном случае для БД. Благодаря им, можно менять схему БД и отслеживать эти изменения. Перейдите в консоли в папку с вашим проектом, в моем случае это
cd domains\laratest1.ruТеперь выполним последовательно в консоли две команды, которые создадут две модели и миграции к ним, после чего я поясню, что мы сделали.
php artisan make:model Models/BlogCategory -m php artisan make:model Models/BlogPost -m php artisan make:model Models/BlogComments -m
Если вы все сделали правильно, то у вас после каждой команды появится сначала Model created successfully. И Created Migration: бла бла бла.
Наши модели, которые мы создали находятся тут app\Models, все миграции хранятся тут database\migrations. В миграции есть методы up и down. Метод up служит для добавления новых столбцов или индексов в базу данных, а down служит для отмены операций, который вы сделали методом up.
Модель и миграция BlogCategory слежит для наших категорий, BlogPost нужен для работы с постами нашего блога, а BlogComments служит для работы с комментариями к постам нашего блога.
Откроем нашу миграцию, которая работает с категориями блога и отредактируем в ней метод up, вставив в этот метод следующий код:
Schema::create('blog_categories', function (Blueprint $table) { $table->increments('id'); $table->integer('parent_id')->unsigned()->default(0); $table->string('slug')->unique(); $table->string('title'); $table->text('description')->nullable(); $table->timestamps(); $table->softDeletes(); });
Из этого кода вы можете догадаться, что тут происходит добавление в таблицу blog_categories столбцов.
В строчке $table->integer('parent_id')->unsigned()->default(0); напись unsigned() говорит, что поле parent_id у нас будет от 0 и выше, а надпись default(0) говорит, что по умолчанию он будет равен 0.
Столбец slug - нужен нам будет для формирования урл, я пока еще не определился как именно у нас будет формироваться урл, поэтому навсякий случай,если он будет формироваться не по id, добавим этот столбец. Надпись unique(); говорит о том, что поле slug должно быть уникальным
Теперь, что касается строчек $table->timestamps(); и $table->softDeletes(); Первая добавит столбцы created_at и updated_at, т.е. когда была создана и обновлена категория, а вторая добавит поле deleted_at это поле будет служить для мягкого удаления, т.е. по факту запись остается в таблице, но если этот столбец заполнен, то она считается как удаленная.
Откроем нашу миграцию, которая работает с постами и отредактируем в ней метод up, вставив в этот метод следующий код:
Schema::create('blog_posts', function (Blueprint $table) { $table->increments('id'); $table->integer('category_id')->unsigned(); $table->integer('user_id')->unsigned(); $table->string('slug')->unique(); $table->string('title'); $table->text('excerpt')->nullable(); $table->text('content_raw')->nullable(); $table->text('content_html')->nullable(); $table->boolean('is_published')->default(false); $table->timestamp('published_at')->nullable(); $table->timestamps(); $table->softDeletes(); $table->foreign('category_id')->references('id')->on('blog_categories'); $table->foreign('user_id')->references('id')->on('users'); $table->index('is_published'); });
Столбец excerpt - будет хранить краткое описание нашего поста, что-то вроде анонса. content_raw и content_html соответственно будут служить для основного текста самого поста. is_published - обозначет опубликован ли пост, published_at - когда он был опубликован.
Отмечу строчку $table->foreign('category_id')->references('id')->on('blog_categories'); она означает, что в столбец category_id будет записываться id категории из таблицы blog_categories. Соответственно строчка $table->foreign('user_id')->references('id')->on('users'); означает, что в столбец user_id будет записывать id пользователя из таблицы users.
Теперь откроем файл миграции с комментариями и отредактируем у него метод up, вставив в этот метод такой код:
Schema::create('blog_comments', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->integer('post_id')->unsigned(); $table->text('cooment')->nullable(); $table->foreign('post_id')->references('id')->on('blog_posts'); $table->foreign('user_id')->references('id')->on('users'); $table->timestamps(); $table->softDeletes(); });
В данном случае мы добавляем столбцы в таблицу с комментариями. Тут я уже не буду пояснять, что тут за столбцы и за что они отвечают, думаю вы сами догадаетесь, если же у вас возникнут какие-то вопросы, то пишите их в комментарии. Как там в песне, "не надо стесняться...".
Откройте файл с миграциями пользователей и внесите небольшие изменения:
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); });
Перед тем, как запустить миграции, если вы не используете как и я homestead или вы используете MariaDB, то вам нужно сделать следующее: в файле \app\Providers\AppServiceProvider.php вставьте следующий код:
namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Schema::defaultStringLength(191); } /** * Register any application services. * * @return void */ public function register() { // } }
Теперь надо запустить наши миграции, чтобы создать все эти таблицы, для этого выполните в консоли команду:
php artisan migrate
Зайдите в бд и проверьте, у вас должны будут появится таблицы.
В следующем уроке мы наполним нашу базу данных, тестовыми данными, а именно создадим тестовых пользователей и тестовые посты и тестовые категории блога.