Создание контроллера. Название в 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();