Menu Zamknij

Реализация CRUD функционала в Laravel 8

Что такое CRUD? 
CRUD — это добавление (created), чтение (read), обновление (update) и удаление (delete), т.е. четыре базовые функции при работе с базами данных.

Добавление данных мы рассмотрели в предыдущем посте, где рассматривали работу контроллеров.
Давайте рассмотрим чтение данных из базы данных.

Открываем TaskController.php и создадим в функцию ReadTask:

				
					public function ReadTask()
    {
        $tasks = Task::all(); //получаем все данные из модели Task
        return view('task', compact('tasks')); //передаём данные в blade-шаблон task 
    }
				
			

Теперь давайте создадим таблицу в нашем blade-шаблоне task.blade.php :

				
					@extends('layouts.app')
{{--Пишем папку и название файла, в который поместим контент из @section--}}

@section('content')
    {{--Так как мы в файле app.blade.php использовали  @yield('content') - с названием content, то и section дожна называться так же--}}
    <div class="container mb-2">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Задание</div>
                    <div class="card-body">
                        {{--Начало формы--}}
                        <form method="POST" action="/pl/{{route('save_task')}}/" data-trp-original-action="{{route('save_task')}}">
                            @csrf
                            {{--Токен - обязательно нужно использовать в формах отправки данных--}}
                            <div class="form-group row">
                                <label class="col-md-4 col-form-label text-md-right">Название задания</label>
                                <div class="col-md-6">
                                    <input type="text" class="form-control" name="name_task" required>
                                </div>
                            </div>
                            <div class="form-group row">
                                <label class="col-md-4 col-form-label text-md-right">Описание</label>
                                <div class="col-md-6">
                                    <input type="text" class="form-control" name="desc" required>
                                </div>
                            </div>
                            <div class="form-group row mb-0">
                                <div class="col-md-8 offset-md-4">
                                    {{--Кнопка--}}
                                    <button type="submit" class="btn btn-primary">
                                        Сохранить
                                    </button>
                                </div>
                            </div>
                        <input type="hidden" name="trp-form-language" value="pl"/></form>
                        {{--Конец формы--}}
                    </div>
                </div>
            </div>
        </div>
    </div>
    {{--И в конце не забываем закрыть нашу секцию--}}
    {{--Таблица задач--}}
    <table class="table table-bordered text-center">
        <tr>
            <th>Название задачи</th>
            <th>Описание</th>
            <th>Статус</th>
        </tr>
        @foreach ($tasks as $task)
            <tr>
                <td>{{ $task->name_task }}</td>
                <td>{{ $task->desc }}</td>
                <td>{{ $task->status }}</td>
            </tr>
        @endforeach
    </table>
    {{--Таблица задач--}}
@endsection
				
			

В web.php удаляем наш маршрут, путь у которого был ‘/’ и пишем путь:

				
					Route::get('/',[TaskController::class,'ReadTask']);
				
			

Должно получиться так:

Запускаем наше приложение. Пишем в терминале команду «php artisan serve».
Вот что у нас получилось:

Теперь все созданные нами задачи будут выводиться  в таблице. 
Так мы ознакомились с двумя функциями добавления данных и чтения. Не будем останавливаться на достигнутом и создадим функции обновления данных и удаления. Открываем контроллер TaskController.phpсоздаём три функции — EditTaskUpdateTask и DeleteTask:

				
					  public function EditTask($id)
    {
        $task = Task::find($id);
        return view('edit_task', compact('task'));
    }
    //EditTask функция передаёт данные в blade-шаблон edit_task.blade.php, который мы создадим позднее

    public function UpdateTask(Request $request, $id)
    {
        DB::table('tasks')->where('id', $id)->update([
            'name_task' => $request->input('name_task'),
            'desc' => $request->input('desc'),
            'status' => 'Action',
        ]);
        return redirect(url('/'));
    }
    //UpdateTask функция перезаписывает данные и редиректит нас на url / (task.blade.php)-страницу добавления задач
    
    public function DeleteTask($id)
    {
        Task::find($id)->delete();
        return redirect()->back();
    }
    //DeleteTask функция удаления задачи 
				
			

Для обновления данных создадим blade-шаблон edit_task.blade.php:

				
					@extends('layouts.app')

@section('content')
    <div class="container mb-2">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Задание</div>
                    <div class="card-body">
                        {{--Начало формы для обновления (изменения) данных--}}
                        <form method="POST" action="/pl/{{route('upload_task',$task->id)}}/" data-trp-original-action="{{route('upload_task',$task->id)}}">
                            @csrf
                            {{--Токен - обязательно нужно использовать в формах отправки данных--}}
                            <div class="form-group row">
                                <label class="col-md-4 col-form-label text-md-right">Название задания</label>
                                <div class="col-md-6">
                                    <input type="text" class="form-control" name="name_task"
                                           value="{{$task->name_task}}" required>
                                    {{--В поля ввода я поместил данные из уже созданной ранее задачи--}}
                                </div>
                            </div>
                            <div class="form-group row">
                                <label class="col-md-4 col-form-label text-md-right">Описание</label>
                                <div class="col-md-6">
                                    <input type="text" class="form-control" name="desc" value="{{$task->desc}}"
                                           required>
                                </div>
                            </div>
                            <div class="form-group row mb-0">
                                <div class="col-md-8 offset-md-4">
                                    {{--Кнопка--}}
                                    <button type="submit" class="btn btn-primary">
                                        Изменить
                                    </button>
                                </div>
                            </div>
                        <input type="hidden" name="trp-form-language" value="pl"/></form>
                        {{--Конец формы--}}
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection
				
			

Открываем  web.php и создаём маршруты к нашим новым функциям:

				
					Route::get('edit/{id}',[TaskController::class,'EditTask'])->name('edit_task'); // маршрут для страницы редактирования задачи
Route::post('upload/{id}',[TaskController::class,'UpdateTask'])->name('upload_task'); // маршрут для обновления (изменения) данных
Route::delete('/delete/{id}',[TaskController::class,'DeleteTask'])->name('delete_task'); // маршрут для удаления задачи
				
			

Последний штрих. Открываем task.blade.php и передаём пути в наши кнопки Редактировать и Удалить (я покажу готовый код таблицы):

				
					 {{--Таблица задач--}}
    <table class="table table-bordered text-center">
        <tr>
            <th>Название задачи</th>
            <th>Описание</th>
            <th>Статус</th>
            <th>Опции</th>
        </tr>
        @foreach ($tasks as $task)
            <tr>
                <td>{{ $task->name_task }}</td>
                <td>{{ $task->desc }}</td>
                <td>{{ $task->status }}</td>
                <td><a class="btn btn-primary" href="/pl/{{route('edit_task',$task->id)}}/">Редактировать</a>
                    <form method="POST" action="/pl/{{route('delete_task',$task->id)}}/" style="display:inline" data-trp-original-action="{{route('delete_task',$task->id)}}">
                        @csrf
                        @method('delete')
                        <button type="submit" class="btn btn-danger">Удалить</button>
                    <input type="hidden" name="trp-form-language" value="pl"/></form>
                </td>
            </tr>
        @endforeach
    </table>
    {{--Таблица задач--}}
				
			

Отлично! Мы славно поработали. Открываем терминал  и пишем команду «php artisan optimize», открываем приложение в браузере http://127.0.0.1:8000 .
Теперь вы можете создавать новые задачи, удалять старые и перезаписывать задачи.
Вот в таком быстром режиме мы ознакомились с функциями CRUD. 
В следующем посте познакомимся с Validations (проверками).

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

>