WEB/システム/IT技術ブログ

Laravelのusersテーブルにカラムを追加してカスタマイズする

update : 2020/04/12

Laravelではコマンド1つでユーザ認証に関連したプログラムファイルやDBを生成してくれるので、とても便利です。
今回はその機能をカスタマイズして、ユーザ情報を保存するusersテーブルのカラムを追加してみたいと思います。

usersテーブルにカラムを追加する

usersテーブルに、例えばカラム「電話番号」「住所」を追加します。
カラムを追加するために、以下のコマンドでマイグレーションファイルを作成します。

> php artisan make:migration add_column_to_users_table

ファイル「database/migrations/2020_xx_xx_xxxxxx_add_column_to_users_table.php」が生成されます。
以下のように、電話番号と住所を追加する処理を追記します。

  public function up()
  {
    Schema::table('users', function (Blueprint $table) {
      $table->string('phone');  // 電話番号
      $table->string('address');  // 住所
    });
  }

  public function down()
  {
    Schema::table('users', function (Blueprint $table) {
      $table->dropColumn('phone');  // 電話番号
      $table->dropColumn('address');  // 住所
    });
  }

ファイルを保存したら、マイグレーションを実行します。

> php artisan migrate

DBのusersテーブルを確認すると、カラム「phone」と「address」が追加されてるのが確認できます。

モデルを編集する

Userモデル「app/User.php」を編集します。

  protected $fillable = [
    'name', 'email', 'password', 'phone', 'address',
  ];

追加したカラム「phone」と「address」を追記します。
これでDB側の準備は完了です。

コントローラを編集する

次に、ユーザ新規登録時に追加したカラムのデータを取り込むために、コントローラ「app/Http/Controllers/Auth/RegisterController.php」を編集します。
以下、バリデーション情報です。必要に応じてバリデーションのオプションを調整します。

  protected function validator(array $data)
  {
    return Validator::make($data, [
      'name' => ['required', 'string', 'max:255'],
      'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
      'password' => ['required', 'string', 'min:8', 'confirmed'],
      'phone' => ['required', 'string', 'max:11'],  // 電話番号
      'address' => ['required', 'string', 'max:255'],  // 住所
    ]);
  }

以下、DBに値を登録する処理です。

  protected function create(array $data)
  {
    return User::create([
      'name' => $data['name'],
      'email' => $data['email'],
      'password' => Hash::make($data['password']),
      'phone' => $data['phone'],
      'address' => $data['address'],
    ]);
  }

ビューを編集する

ユーザ新規登録画面に電話番号と住所を入力するフォームを追加します。
ビュー「resources/views/auth/register.blade.php」を編集します。

<div class="form-group row">
  <label for="phone" class="col-md-4 col-form-label text-md-right">電話番号</label>
  <div class="col-md-6">
    <input id="phone" type="text" class="form-control{{ $errors->has('phone') ? ' is-invalid' : '' }}" name="phone" value="{{ old('phone') }}" required autofocus>
    @if ($errors->has('phone'))
      <span class="invalid-feedback">
        <strong>{{ $errors->first('phone') }}</strong>
      </span>
    @endif
  </div>
</div>
<div class="form-group row">
  <label for="address" class="col-md-4 col-form-label text-md-right">住所</label>
  <div class="col-md-6">
    <input id="address" type="text" class="form-control{{ $errors->has('address') ? ' is-invalid' : '' }}" name="address" value="{{ old('address') }}" required autofocus>
    @if ($errors->has('address'))
      <span class="invalid-feedback">
        <strong>{{ $errors->first('address') }}</strong>
      </span>
    @endif
  </div>
</div>

基本的に、既存の「名前」を入力するエリアのタグをコピーして、電話番号と住所にカスタマイズ置き換えるだけで動作します。レイアウト調整やバリデーションの内容など、必要に応じて調整すればよいです。

最後に、実際にブラウザからユーザ新規登録画面にアクセスし、電話番号と住所を入力して登録します。
DBのusersテーブルに追加したカラムにデータが入力されていることを確認できるはずです。

B!

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives