5. Создание моделей и работа с базой данных

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', 'Сообщение было добавлено');

Теперь у нас выводятся ошибки, либо ‘Сообщение было добавлено’ .

0 0 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x