https://itproger.com/course/laravel/5
Подключение к базе данных
Зайдем программу для работы с базами данных. У меня это phpmyadmin. И создадим базу данных под названием «laravel_blog».
Изменим файл .env, который находится в корне проекта. Запишем в него данные для подключения к нашей базе данных:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_blog DB_USERNAME=root DB_PASSWORD=root
У Вас могут быть свои данный. Где смотреть порт для соедниния с базой.
Для работы с базой должен быть запущен веб-сервер, сервер базы данных и Node.js . Open Server автоматически запускает веб-сервер и сервер базы данных, а Node.js запускается мы запускали во втором уроке: https://khodo.ru/2-sozdanie-novyh-stranicz-na-laravel/ . Его нужно запустить следующим образом:
npm run watch
Создание моделей
Выполним команду в консоли:
G:\OpenServer\domains\laratest.loc>php artisan make:model Contact -m Model created successfully. Created Migration: 2020_10_26_183908_create_contacts_table
Здесь команда -m
обозначает создание файла миграции вместе с файлом модели.
У нас появилось два новых файла:
database/migrations/2020_10_26_183908_create_contacts_table.php — миграция
app/Contact.php — модель
Переместим файл app/Contact.php в папку app/Models/ , так как Laravel 7 по умолчанию не имеет отдельной папки для моделей. А нам этого хотелось бы. И поменяем namespace в файле app/Models/Contact.php на:
namespace App\Models;
Миграции
Заходим в наш файл миграций database/migrations/2020_10_26_183908_create_contacts_table.php
Там мы видим две функции: up и down.
Функция up — выполняется при миграции
up нужна для создания таблицы в базе данных. Сейчас она выглядит так:
public function up() { Schema::create('contacts', function (Blueprint $table) { $table->id(); $table->timestamps(); }); }
Добавим еще некоторый поля в нашу таблицу. Команды для создания полей находятся здесь: https://laravel.com/docs/master/migrations#creating-columns
public function up() { Schema::create('contacts', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->string('subject'); $table->text('message'); $table->timestamps(); }); }
И выполним команду:
G:\OpenServer\domains\laratest.loc>php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.03 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.02 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds) Migrating: 2020_10_26_183908_create_contacts_table Migrated: 2020_10_26_183908_create_contacts_table (0.01 seconds)
Выполнились миграции для всех файлов в database/migrations и создались таблицы в базе данных:
php artisan migrate:rollback —step=3 — отмена миграций
Команда:
php artisan migrate:rollback --step=3
Отменяет количество миграций указанных в параметре —step . Если параметр —step не указан, то будет отменена одна миграция.
php artisan migrate:reset — отмена всех миграций.
Выполним ее:
G:\OpenServer\domains\laratest.loc>php artisan migrate:reset Rolling back: 2020_10_26_183908_create_contacts_table Rolled back: 2020_10_26_183908_create_contacts_table (0.01 seconds) Rolling back: 2019_08_19_000000_create_failed_jobs_table Rolled back: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds) Rolling back: 2014_10_12_100000_create_password_resets_table Rolled back: 2014_10_12_100000_create_password_resets_table (0.01 seconds) Rolling back: 2014_10_12_000000_create_users_table Rolled back: 2014_10_12_000000_create_users_table (0.01 seconds)
Она отменила все миграции, то бишь удалила все таблицы, кроме migrations.
Выполним миграцию заново:
G:\OpenServer\domains\laratest.loc>php artisan migrate
Добавление значений в базу данных
Заходим в app/Http/Controllers/ContactController.php и пропишем там подключение нашей модели:
use App\Models\Contact;
Изменим функцию submit:
public function submit(ContactRequest $req) { $contact = new Contact(); $contact->name = $req->input('name'); $contact->email = $req->input('email'); $contact->subject = $req->input('subject'); $contact->message = $req->input('message'); $contact->save(); return redirect()->route('home'); }
Здесь $contact — экземпляр модели Contact, которая будет взаимодействовать с данными в базе. $req — это наш запрос, приходящий из формы.
Возможно нужно будет почистить кэш.
После этого на странице http://laratest.loc/contact мы можем отправить форму. И данные из нее отобразятся в таблице «contacts».
Файл для сообщений messages.blade.php
Этот файл нужен для вывода сообщений об успешной или не успешной операции. Дабы не дублировать на каждой странице.
Создадим файл resources/views/messages.blade.php с содержимым:
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{$error}}</li> @endforeach </ul> </div> @endif @if (session('success')) <div class="alert alert-success"> {{ session('success') }} </div> @endif
Этот файл выводит сообщения об ошибках, а если session(‘success’), то и её.
Удалим из всех наших блоков код вывода ошибки, который есть в файле message.blade.php. И подключим файл messages в главном слое resources/views/layouts/app.blade.php:
<div class="container mt-5"> @include('inc.messages')
И вызовем сессию после редиректа на главную в файле app/Http/Controllers/ContactController.php:
return redirect()->route('home')->with('success', 'Сообщение было добавлено');
Теперь у нас выводятся ошибки, либо ‘Сообщение было добавлено’ .