MVC — Controller

Создание контроллера. Название в CamelCase в конце обязательно Controller

php artisan make:controller НазваниеController

Не забываем использовать нужную модель в контроллере. Именно в модели описана работа с конкретной табличкой.

use App\Models\Worker;

Передача данных в шаблон. Мы изначально находимся в папке views и от нее идем к шаблону. Точка является разделителем папок, в примере index это название файла к которому приписано .blade.php

$workers = Worker::all();
return view('worker.index', compact('workers'));

Для каждого из переданного параметров, функция compact() ищет переменную с указанным именем в текущей таблице символов и добавляет их в выводимый массив так, что имя переменной становится ключом, а содержимое переменной становится значением этого ключа (обратная функция extract)

CREATE

Worker::create($data); 

В $data обязательно ключи массива должны совпадать с колонками таблицы. В противном случае нужно внутри метода описать подробно, в какую колонку какие данные записывать. Запись в таблицу можно делать внутри цикла.

Получение данных из формы и запись в базу.

Для начала не забываем @csrf токен указывать в форме а сами данные забираем следующим образом

$data = request()->all();

Данные должны пройти валидацию, для этого создаем новый класс

php artisan make:request Worker/storeRequest

В названии Worker это название сущности с которой работаем, ну или же той таблички в которую идет запись. Правила нейминга такие же как и при создании миграций/моделей. storeRequest комбинировано, store это экшен контроллера а Request обязательная часть для магии.

В самом реквесте первым делом в методе authorize() меняем false на true

В методе rules прописываются основные правила валидации. В первую очередь стоит указать обязательные поля и те которые могут быть пустыми.

Все правила валидации

После написания правил валидации необходимо дополнить получение данных в методе, сделать запись в базу и перенаправить запрос на нужную страницу

public function store(StoreRequest $request)
  {
    $data = $request->validated();
    $data['is_married'] = isset($data['is_married']) ? true : false; - для чекбоксов
    Worker::create($data);
    return redirect()->route('worker.index');
  }

READ

$worker = Worker::all(); - все данные сразу

В ответе интересны пункты:

  • original — то что пришло с базы
  • attributes — по сути тоже самое но в процессе мы можем что то добавить свое
$worker->new_attr = 'new attr'; - добавить новый атрибут

Поиск первой записи

$worker = Worker::first(); - первая запись

Поиск по конкретному id

$worker = Worker::find(1);

Обращение к данным

$worker->title; обращение к атрибуту по его ключу
$worker->toArray(); преобразование attributes к обычному массиву

Работа с роутом где указан например id человека.

Route::get('/workers/show/{worker}', [WorkerController::class, 'show'])->name('worker.show');

Дальше есть 2 варианта, первый это обычная передача данных, названия в этом случае не так важны

public function show($id)
  {
    $worker = Worker::findOrFail($id);
    return view('worker.show', compact('worker'));
  }

Второй вариант сделает тоже самое но на уровне магических практик. В данном случае в метод передается модель и свойство с конкретным именем. Такое же имя должно быть и в роуте

public function show(Worker $worker)
  {
    return view('worker.show', compact('worker'));
  }

UPDATE

Базовый вариант обновления. Сначала найти запись и уже потом обновить. Требования к данным такие же как и при создании

$worker = Worker::find(1);
$worker->update($data);

DELETE

$worker = Worker::find(1);
$worker->delete();