Ikeda's Blog

Laravelでブログサイトを作る 12. 管理機能・親カテゴリの新規登録と更新

▲閉じる

目次

はじめに

前回、親カテゴリの一覧表示の続きです。

Controller

app/Http/Controllers/ParentCategoryController.php
前回で一覧表示を実装したControllerに、更新処理を追加します。
FORMのaction属性に{{ route('admin_parent_update') }}としておいたので、submit後はルーティングで指定したArticleController@update、つまり、上記Controller内のupdateメソッド(今回追加するもの)が実行されます。

    /**
     * 親カテゴリ レコード総更新
     *
     * @param Request $request
     * @return mixed
     */
    public function update(Request $request) {
        $flg = true; // $flgがfalseになるまでループします
        for ($i = 1;$flg;$i++) {
            // 入力欄が無くなったらループ終了
            if (!isset($request['id_' . $i])) {
                $flg = false;
                break;
            }

            // 入力値を取得
            $id = $request['id_' . $i];
            $name = $request['name_' . $i];
            $number = $request['number_' . $i];
            $delete = $request['delete_' . $i];

            // カテゴリ名、表示順が空白になっているレコードは登録・変更しない
            if ($name === null || $number === null) {
                continue;
            }

            // idがあるなら上書き、なければ新規作成
            $parentCategoryData = $this->parentCategory->withTrashed()->where('id', $id)->first();
            if ($parentCategoryData === null) {
                $parentCategoryData = new ParentCategory();
            }
            $parentCategoryData->name = $name;
            $parentCategoryData->number = $number;
            $parentCategoryData->save();

            if ($delete === 'on') {
                // 削除チェックが入っていれば削除
                $parentCategoryData->delete();
            } else if ($parentCategoryData->trashed()) {
                // 削除済みレコードを復帰させる
                $parentCategoryData->restore();
            }
        }

        return redirect()->route('admin_parent');
    }

パラメータは「id_連番」といった規則で送られてくるので、これを1件ずつ確認します。
カテゴリの名前と表示順が空欄であれば、登録も更新もしません。空欄で登録されると他で使う時に面倒なのでこのようにしています。

削除処理をsave()の後に実行しているのは、例えば「とりあえずこのカテゴリ作るけど、記事のネタがある程度できてから有効化しよう」のようなケースだと、新規登録のクセして削除チェックしている、なんてことが起きるためです。