129 lines
3.8 KiB
PHP
129 lines
3.8 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Admin;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use Illuminate\Http\Request;
|
||
use App\Models\Psection;
|
||
|
||
class PsectionController extends Controller
|
||
{
|
||
// 一覧画面
|
||
public function list(Request $request)
|
||
{
|
||
$inputs = $request->all();
|
||
// ソート可能なカラム
|
||
$allowedSortColumns = ['psection_id', 'psection_subject'];
|
||
|
||
// ソート情報の取得
|
||
$sortColumn = $inputs['sort'] ?? 'psection_id';
|
||
$sortType = strtolower($inputs['sort_type'] ?? 'asc');
|
||
|
||
$query = \App\Models\Psection::query();
|
||
|
||
if (in_array($sortColumn, $allowedSortColumns, true)) {
|
||
if (!in_array($sortType, ['asc', 'desc'], true)) {
|
||
$sortType = 'asc';
|
||
}
|
||
$query->orderBy($sortColumn, $sortType);
|
||
}
|
||
|
||
// ページネーション(20件)
|
||
$list = $query->paginate(20);
|
||
|
||
return view('admin.psection.list', [
|
||
'list' => $list,
|
||
'sort' => $sortColumn,
|
||
'sort_type' => $sortType,
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 車種区分マスタ:新規登録(画面/処理)
|
||
*/
|
||
public function add(Request $request)
|
||
{
|
||
if ($request->isMethod('get')) {
|
||
// GET:新規画面を表示
|
||
return view('admin.psection.add', [
|
||
'isEdit' => false,
|
||
'record' => new Psection(),
|
||
]);
|
||
}
|
||
|
||
// POST:バリデーション
|
||
$validated = $request->validate([
|
||
// 'psection_id' は自動採番
|
||
'psection_subject' => 'required|string|max:255',
|
||
]);
|
||
|
||
// 登録処理
|
||
Psection::create($validated);
|
||
|
||
// 完了メッセージ+一覧へ戻る
|
||
return redirect()->route('psections')->with('success', '登録しました。');
|
||
}
|
||
|
||
|
||
/**
|
||
* 車種区分マスタ:編集(画面/処理)
|
||
*/
|
||
public function edit(Request $request, $id)
|
||
{
|
||
// 主キーで検索(見つからない場合は404)
|
||
$record = Psection::findOrFail($id);
|
||
|
||
if ($request->isMethod('get')) {
|
||
// 編集画面表示
|
||
return view('admin.psection.edit', [
|
||
'isEdit' => true, // ← ★ Blade 側のフォームで新規/編集を判定するため
|
||
'record' => $record, // ← ★ _form.blade.php で使用する
|
||
]);
|
||
}
|
||
|
||
// POST時:バリデーション
|
||
$validated = $request->validate([
|
||
'psection_subject' => 'required|string|max:255',
|
||
]);
|
||
|
||
// データ更新
|
||
$record->update($validated);
|
||
|
||
// 成功メッセージ & リダイレクト
|
||
return redirect()->route('psections')->with('success', '更新しました。');
|
||
}
|
||
|
||
/**
|
||
* 削除(単一/複数対応)
|
||
*/
|
||
public function delete(Request $request)
|
||
{
|
||
$ids = [];
|
||
|
||
// 単一削除(編集画面などからの削除ボタン)
|
||
if ($request->filled('id')) {
|
||
$ids[] = (int) $request->input('id');
|
||
}
|
||
|
||
// 一覧画面からの複数削除チェックボックス対応
|
||
if (is_array($request->input('pk'))) {
|
||
$ids = array_merge($ids, $request->input('pk'));
|
||
}
|
||
|
||
// 重複削除・無効値除去
|
||
$ids = array_values(array_unique(array_map('intval', $ids)));
|
||
|
||
// 削除対象がない場合
|
||
if (empty($ids)) {
|
||
return back()->with('error', '削除対象が選択されていません。');
|
||
}
|
||
|
||
// 削除実行
|
||
Psection::whereIn('psection_id', $ids)->delete();
|
||
|
||
// 完了メッセージ+リダイレクト
|
||
return redirect()->route('psections')->with('success', '削除しました。');
|
||
}
|
||
|
||
}
|