Halcyon Days

IT × 移住 × ファイナンス

MENU

セレクトボックスの値に応じてRequestの情報を削除してから更新したい

何がしたいか

登録情報の編集時に、セレクトボックスの値に応じて登録内容を削除したい。

シチュエーション

ある会社は店頭販売とネット販売という2つの販売経路を持っており、事務担当者が社内システムから販売の種別と顧客情報をデータベースに登録している。

ただし、顧客情報が登録されるのはネット販売の時だけであり、店頭販売の時は登録されない。

ある日、ネット販売を希望していた顧客から店頭で見てから購入したいとの要望があったため、データを変更しなければなくなった。

このようなシチュエーションでネット販売から店頭販売へと登録データを変更した時に顧客情報をユーザー名以外のすべて削除して更新したい。

作成したコード

顧客情報は名前と住所、電話番号、メールアドレスが登録されているとする。

この情報をネット販売から店頭販売に切り替わったときにユーザー名以外の情報を削除してから更新するメソッドを組み立てる。

フロントエンド部分は割愛。

<?php

// 別のメソッドなど

public function update(Reqest $request)
{

/**
 * 名前: user_name
 * 住所: user_address
 * 電話番号: user_phone
 * メールアドレス: user_mail
 * 販売方法: sales_type 0→店頭、1→ネット
**/
 
try {
    $user = User::findOrFail($reqest->user_number);
            
    if($request->input('sales_type') === '0') {
        $request->merge([
            'user_address' => null,
            'user_phone'  => null,
            'user_mail' => null,
        ]);
                
        $validated = $request->validate([
             'user_name' => 'nullable|string',
           'user_address' => 'nullable|string',
           'user_phone' => 'nullable|phone',
            'user_mail' => 'nullable|email'
        ]);
            
          $user->update($validated);
            
    return redirect()->route('path.to.route')->with('success', '更新しました');
catch (\Exception $e) {
    return redirect()->route('path.to.route')->with('error', '更新中にエラーが発生しました');
    }
}

merge メソッドでリクエストデータを null で上書きしてから更新しています。

たとえば、下記のようなデータがリクエストで飛んできた場合、

{
    "sales_type": "0",
    "user_name": "John Doe",
    "user_address": "123 Example Street",
    "user_phone": "123-456-7890",
    "user_mail": "test@test.com"
}

下記のように情報が書き換わって更新されます。

{
    "sales_type": "0",
    "user_name": "John Doe",
    "user_address": null,
    "user_phone": null,
    "user_mail": null
}

コードの誤りやもっときれいに書けるというご指摘お待ちしております!

参照ドキュメント